赞
踩
目录
c)MongoDB 这么强大,是不是可以直接代替 MySQL ?
b)类比 MySQL 的 where name = 'cyk'
MongoDB 是一个基于 分布式文件存储的数据库。由 C++ 编写,就是为 Web应用提供可拓展 + 高性能数据存储解决方案.
MongDB 是一个介于关系数据库和非关系数据库之间的产品. 他支持的数据结构非常松散,类似 json 的 bson 格式,因此可以存储比较复杂的数类型. Mongo 最大的特点就是他的查询非常强大,语法类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分的功能,并且还支持对数据建立索引.
Ps:总而言之,设计到大量的读写场景的就可以使用到 MongoDB(比如用户行为:点赞、关注...),因为他的处理速度比 MySQL 要快.
主要有以下几点原因:
这个当然不可以的啊~
例如文档:{"name": "cyk", "age": 20}
1. 拉取 mongo 镜像
docker pull mongo:5.0.5
2. 运行 mongo
docker run -d --name mongo -p 27017:27017 mongo:5.0.5
3. 进入 mongo 容器
show databases; | show dbs
默认数据库说明:
use 库名
Ps:use 表示创建并使用,当前库中没有数据时默认不显示这个库
db
Ps:默认连接的库是 test,但是由于 test 中没有数据,因此不会展示
默认删除当前选中的数据库.
db.dropDatabase()
Ps:删除以后用 db 命令还是会显示当前库,只是没有了数据而已
db.createCollection('集合名', [options])
options 可以是可选参数,如下:
capped:布尔类型. 如果为 true,则创建固定集合(有固定大小的集合,当集合到达最大值时,会自动覆盖最早的文档. 如果值为 true,必须指定 size 参数)。
size:数值类型. 指定集合最大值,单位字节. 如果 capped 为 true ,也需要指定该字段.
max:数值类型. 指定固定集合中文档的最大数量.
Ps:当集合不存在时,插入文档也会自动创建集合.
Ps:这种有限集合中的文档不能通过 mongo命令 删除,会报错:“cannot remove from a capped collection: article.article”.
show collections; | show tables;
db.集合名称.drop();
a)单条文档
db.集合名称.insert({"name": "cyk", "age": 20})
b)多条文档
- //写法一:
- db.集合名.insertMany(
- [<document1>, <document2>, ......],
- oriteConcern: 1, //写入策略,默认为 1,表示确认写操作,0 表示不要求.
- ordered: true //指定是否按顺序写入,默认为 true,表示顺序写入
- )
-
- //写法二:
- db.集合名.insert([
- <document1>,
- <document2>,
- ......
- ]);
c)脚本方式
- > for(let i = 0; i < 100; i++) {
- ... db.user.insert({"id": i, "name": "cyk" + i, "age": 20});
- ... }
- WriteResult({ "nInserted" : 1 })
- > db.user.find(); //查询所有
- { "_id" : ObjectId("65a38177af74fc49eb99f835"), "name" : "cyk", "age" : 20 }
- { "_id" : ObjectId("65a38302af74fc49eb99f836"), "name" : "cyk", "age" : 20 }
- { "_id" : ObjectId("65a38302af74fc49eb99f837"), "name" : "cyk", "age" : 20 }
- { "_id" : ObjectId("65a38372af74fc49eb99f838"), "name" : "cyk", "age" : 20 }
- { "_id" : ObjectId("65a38372af74fc49eb99f839"), "name" : "cyk", "age" : 20 }
- { "_id" : ObjectId("65a383faaf74fc49eb99f83a"), "id" : 0, "name" : "cyk0", "age" : 20 }
- { "_id" : ObjectId("65a383faaf74fc49eb99f83b"), "id" : 1, "name" : "cyk1", "age" : 20 }
- { "_id" : ObjectId("65a383faaf74fc49eb99f83c"), "id" : 2, "name" : "cyk2", "age" : 20 }
- { "_id" : ObjectId("65a383faaf74fc49eb99f83d"), "id" : 3, "name" : "cyk3", "age" : 20 }
- { "_id" : ObjectId("65a383faaf74fc49eb99f83e"), "id" : 4, "name" : "cyk4", "age" : 20 }
- { "_id" : ObjectId("65a383faaf74fc49eb99f83f"), "id" : 5, "name" : "cyk5", "age" : 20 }
- { "_id" : ObjectId("65a383faaf74fc49eb99f840"), "id" : 6, "name" : "cyk6", "age" : 20 }
- { "_id" : ObjectId("65a383faaf74fc49eb99f841"), "id" : 7, "name" : "cyk7", "age" : 20 }
- { "_id" : ObjectId("65a383faaf74fc49eb99f842"), "id" : 8, "name" : "cyk8", "age" : 20 }
- { "_id" : ObjectId("65a383faaf74fc49eb99f843"), "id" : 9, "name" : "cyk9", "age" : 20 }
- { "_id" : ObjectId("65a383faaf74fc49eb99f844"), "id" : 10, "name" : "cyk10", "age" : 20 }
- { "_id" : ObjectId("65a383faaf74fc49eb99f845"), "id" : 11, "name" : "cyk11", "age" : 20 }
- { "_id" : ObjectId("65a383faaf74fc49eb99f846"), "id" : 12, "name" : "cyk12", "age" : 20 }
- { "_id" : ObjectId("65a383faaf74fc49eb99f847"), "id" : 13, "name" : "cyk13", "age" : 20 }
- { "_id" : ObjectId("65a383faaf74fc49eb99f848"), "id" : 14, "name" : "cyk14", "age" : 20 }
- Type "it" for more
Ps:
- MongoDB 中每个文档都有一个 _id 作为唯一标识,_id 默认会自动生成,如果手动指定 _id 将使用手动指定的值作为 _id 的值.
- 上述案例中演示的 db.user.find() 表示查询所有,但默认会按照分页的方式,20条为单位进行显示.
- db.集合名称.remove(
- <query>,
- {
- justOne: <boolean>,
- writeConcern: <document>
- }
- )
可选参数如下:
删除所有如下:
- db.集合名.update(
- <query>,
- <update>,
- {
- upsert: <boolean>,
- multi: <boolean>,
- writeConcern: <document>
- }
- );
参数说明:
a)示例一:将符合条件的全部更新成后面的文档,相当于先删除再插入(不保留原有文档).
- > db.user.find();
- { "_id" : 0, "name" : "cyk0", "age" : 10000 }
- { "_id" : 1, "name" : "cyk1", "age" : 10000 }
- { "_id" : 2, "name" : "cyk2", "age" : 10000 }
- { "_id" : 3, "name" : "cyk3", "age" : 10000 }
- { "_id" : 4, "name" : "cyk4", "age" : 10000 }
- { "_id" : 5, "name" : "cyk5", "age" : 10000 }
- { "_id" : 6, "name" : "cyk6", "age" : 10000 }
- { "_id" : 7, "name" : "cyk7", "age" : 10000 }
- { "_id" : 8, "name" : "cyk8", "age" : 10000 }
- { "_id" : 9, "name" : "cyk9", "age" : 10000 }
- >
- > db.user.update({name: "cyk0"}, {name: "lyj", bir: new Date()})
- WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
- >
- > db.user.find();
- { "_id" : 0, "name" : "lyj", "bir" : ISODate("2024-01-14T07:29:44.291Z") }
- { "_id" : 1, "name" : "cyk1", "age" : 10000 }
- { "_id" : 2, "name" : "cyk2", "age" : 10000 }
- { "_id" : 3, "name" : "cyk3", "age" : 10000 }
- { "_id" : 4, "name" : "cyk4", "age" : 10000 }
- { "_id" : 5, "name" : "cyk5", "age" : 10000 }
- { "_id" : 6, "name" : "cyk6", "age" : 10000 }
- { "_id" : 7, "name" : "cyk7", "age" : 10000 }
- { "_id" : 8, "name" : "cyk8", "age" : 10000 }
- { "_id" : 9, "name" : "cyk9", "age" : 10000 }
b)示例二:更新是所有符合条件的数据,并且保留原有数据,只更新指定字段.
- > db.user.find();
- { "_id" : 0, "name" : "lyj", "bir" : ISODate("2024-01-14T07:29:44.291Z") }
- { "_id" : 1, "name" : "cyk1", "age" : 10000 }
- { "_id" : 2, "name" : "cyk2", "age" : 10000 }
- { "_id" : 3, "name" : "cyk3", "age" : 10000 }
- { "_id" : 4, "name" : "cyk4", "age" : 10000 }
- { "_id" : 5, "name" : "cyk5", "age" : 10000 }
- { "_id" : 6, "name" : "cyk6", "age" : 10000 }
- { "_id" : 7, "name" : "cyk7", "age" : 10000 }
- { "_id" : 8, "name" : "cyk8", "age" : 10000 }
- { "_id" : 9, "name" : "cyk9", "age" : 10000 }
- >
- > db.user.update({name: "cyk1"}, {$set: {name: "lyj"}},{multi: true})
- WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
- >
- > db.user.find();
- { "_id" : 0, "name" : "lyj", "bir" : ISODate("2024-01-14T07:29:44.291Z") }
- { "_id" : 1, "name" : "lyj", "age" : 10000 }
- { "_id" : 2, "name" : "cyk2", "age" : 10000 }
- { "_id" : 3, "name" : "cyk3", "age" : 10000 }
- { "_id" : 4, "name" : "cyk4", "age" : 10000 }
- { "_id" : 5, "name" : "cyk5", "age" : 10000 }
- { "_id" : 6, "name" : "cyk6", "age" : 10000 }
- { "_id" : 7, "name" : "cyk7", "age" : 10000 }
- { "_id" : 8, "name" : "cyk8", "age" : 10000 }
- { "_id" : 9, "name" : "cyk9", "age" : 10000 }
c)更新符合条件的第一条数据,并且保留原有数据,只更新指定字段.
- > db.user.find();
- { "_id" : 0, "name" : "lyj", "bir" : ISODate("2024-01-14T07:29:44.291Z") }
- { "_id" : 1, "name" : "lyj", "age" : 10000 }
- { "_id" : 2, "name" : "cyk2", "age" : 10000 }
- { "_id" : 3, "name" : "cyk3", "age" : 10000 }
- { "_id" : 4, "name" : "cyk4", "age" : 10000 }
- { "_id" : 5, "name" : "cyk5", "age" : 10000 }
- { "_id" : 6, "name" : "cyk6", "age" : 10000 }
- { "_id" : 7, "name" : "cyk7", "age" : 10000 }
- { "_id" : 8, "name" : "cyk8", "age" : 10000 }
- { "_id" : 9, "name" : "cyk9", "age" : 10000 }
- >
- > db.user.update({name: "cyk2"}, {$set: {name: "lyj"}});
- WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
- >
- > db.user.find();
- { "_id" : 0, "name" : "lyj", "bir" : ISODate("2024-01-14T07:29:44.291Z") }
- { "_id" : 1, "name" : "lyj", "age" : 10000 }
- { "_id" : 2, "name" : "lyj", "age" : 10000 }
- { "_id" : 3, "name" : "cyk3", "age" : 10000 }
- { "_id" : 4, "name" : "cyk4", "age" : 10000 }
- { "_id" : 5, "name" : "cyk5", "age" : 10000 }
- { "_id" : 6, "name" : "cyk6", "age" : 10000 }
- { "_id" : 7, "name" : "cyk7", "age" : 10000 }
- { "_id" : 8, "name" : "cyk8", "age" : 10000 }
- { "_id" : 9, "name" : "cyk9", "age" : 10000 }
- >
d)更新符合条件的所有数据,保留原有数据,只更新指定字段. 如果没有条件符合时,直接插入数据.
- > db.user.find()
- { "_id" : 0, "name" : "cyk", "age" : "20" }
- { "_id" : 1, "name" : "cyk", "age" : "20" }
- { "_id" : 2, "name" : "cyk", "age" : "20" }
- { "_id" : 3, "name" : "cyk", "age" : "20" }
- { "_id" : 4, "name" : "cyk", "age" : "20" }
- { "_id" : 5, "name" : "cyk", "age" : "20" }
- { "_id" : 6, "name" : "cyk", "age" : "20" }
- { "_id" : 7, "name" : "cyk", "age" : "20" }
- { "_id" : 8, "name" : "cyk", "age" : "20" }
- { "_id" : 9, "name" : "cyk", "age" : "20" }
- >
- > db.user.update({name: "cyk"}, {$set: {name: "lyj"}}, {multi:true, upsert:true});
- WriteResult({ "nMatched" : 10, "nUpserted" : 0, "nModified" : 10 })
- >
- > db.user.find();
- { "_id" : 0, "name" : "lyj", "age" : "20" }
- { "_id" : 1, "name" : "lyj", "age" : "20" }
- { "_id" : 2, "name" : "lyj", "age" : "20" }
- { "_id" : 3, "name" : "lyj", "age" : "20" }
- { "_id" : 4, "name" : "lyj", "age" : "20" }
- { "_id" : 5, "name" : "lyj", "age" : "20" }
- { "_id" : 6, "name" : "lyj", "age" : "20" }
- { "_id" : 7, "name" : "lyj", "age" : "20" }
- { "_id" : 8, "name" : "lyj", "age" : "20" }
- { "_id" : 9, "name" : "lyj", "age" : "20" }
- >
- > db.user.update({name: "cyk"}, {$set: {name: "lyj"}}, {multi:true, upsert:true});
- WriteResult({
- "nMatched" : 0,
- "nUpserted" : 1,
- "nModified" : 0,
- "_id" : ObjectId("65a39089bfda7f595ed18e98")
- })
- >
- > db.user.find();
- { "_id" : 0, "name" : "lyj", "age" : "20" }
- { "_id" : 1, "name" : "lyj", "age" : "20" }
- { "_id" : 2, "name" : "lyj", "age" : "20" }
- { "_id" : 3, "name" : "lyj", "age" : "20" }
- { "_id" : 4, "name" : "lyj", "age" : "20" }
- { "_id" : 5, "name" : "lyj", "age" : "20" }
- { "_id" : 6, "name" : "lyj", "age" : "20" }
- { "_id" : 7, "name" : "lyj", "age" : "20" }
- { "_id" : 8, "name" : "lyj", "age" : "20" }
- { "_id" : 9, "name" : "lyj", "age" : "20" }
- { "_id" : ObjectId("65a39089bfda7f595ed18e98"), "name" : "lyj" }
db.集合名.find(query, projection)
query:可选,使用查询操作符指定查询条件.
projection:可选,使用投影操作符指定返回的键。查询时返回文档中所有键值,只需要省略该参数即可(默认省略).
如果需要以易读的方式来读取数据,可以使用 pretty() 方法以格式化的方式来显示文档,语法如下:
db.集合名.find().pretty()
- > db.user.find();
- { "_id" : 0, "name" : "cyk0" }
- { "_id" : 1, "name" : "cyk1" }
- { "_id" : 2, "name" : "cyk2" }
- { "_id" : 3, "name" : "cyk3" }
- { "_id" : 4, "name" : "cyk4" }
- { "_id" : 5, "name" : "cyk5" }
- { "_id" : 6, "name" : "cyk6" }
- { "_id" : 7, "name" : "cyk7" }
- { "_id" : 8, "name" : "cyk8" }
- { "_id" : 9, "name" : "cyk9" }
- >
- > db.user.find({name: "cyk0"})
- { "_id" : 0, "name" : "cyk0" }
- > db.user.find();
- { "_id" : 0, "name" : "cyk0" }
- { "_id" : 1, "name" : "cyk1" }
- { "_id" : 2, "name" : "cyk2" }
- { "_id" : 3, "name" : "cyk3" }
- { "_id" : 4, "name" : "cyk4" }
- { "_id" : 5, "name" : "cyk5" }
- { "_id" : 6, "name" : "cyk6" }
- { "_id" : 7, "name" : "cyk7" }
- { "_id" : 8, "name" : "cyk8" }
- { "_id" : 9, "name" : "cyk9" }
- >
- >
- > db.user.find({_id: {$lt: 5}})
- { "_id" : 0, "name" : "cyk0" }
- { "_id" : 1, "name" : "cyk1" }
- { "_id" : 2, "name" : "cyk2" }
- { "_id" : 3, "name" : "cyk3" }
- { "_id" : 4, "name" : "cyk4" }
- > db.user.find();
- { "_id" : 0, "name" : "cyk0" }
- { "_id" : 1, "name" : "cyk1" }
- { "_id" : 2, "name" : "cyk2" }
- { "_id" : 3, "name" : "cyk3" }
- { "_id" : 4, "name" : "cyk4" }
- { "_id" : 5, "name" : "cyk5" }
- { "_id" : 6, "name" : "cyk6" }
- { "_id" : 7, "name" : "cyk7" }
- { "_id" : 8, "name" : "cyk8" }
- { "_id" : 9, "name" : "cyk9" }
- >
- > db.user.find({_id: {$lte: 5}})
- { "_id" : 0, "name" : "cyk0" }
- { "_id" : 1, "name" : "cyk1" }
- { "_id" : 2, "name" : "cyk2" }
- { "_id" : 3, "name" : "cyk3" }
- { "_id" : 4, "name" : "cyk4" }
- { "_id" : 5, "name" : "cyk5" }
- >
- > db.user.find();
- { "_id" : 0, "name" : "cyk0" }
- { "_id" : 1, "name" : "cyk1" }
- { "_id" : 2, "name" : "cyk2" }
- { "_id" : 3, "name" : "cyk3" }
- { "_id" : 4, "name" : "cyk4" }
- { "_id" : 5, "name" : "cyk5" }
- { "_id" : 6, "name" : "cyk6" }
- { "_id" : 7, "name" : "cyk7" }
- { "_id" : 8, "name" : "cyk8" }
- { "_id" : 9, "name" : "cyk9" }
- >
- > db.user.find({_id: {$gt: 5}})
- { "_id" : 6, "name" : "cyk6" }
- { "_id" : 7, "name" : "cyk7" }
- { "_id" : 8, "name" : "cyk8" }
- { "_id" : 9, "name" : "cyk9" }
- >
- > db.user.find();
- { "_id" : 0, "name" : "cyk0" }
- { "_id" : 1, "name" : "cyk1" }
- { "_id" : 2, "name" : "cyk2" }
- { "_id" : 3, "name" : "cyk3" }
- { "_id" : 4, "name" : "cyk4" }
- { "_id" : 5, "name" : "cyk5" }
- { "_id" : 6, "name" : "cyk6" }
- { "_id" : 7, "name" : "cyk7" }
- { "_id" : 8, "name" : "cyk8" }
- { "_id" : 9, "name" : "cyk9" }
- >
- > db.user.find({_id: {$gte: 5}})
- { "_id" : 5, "name" : "cyk5" }
- { "_id" : 6, "name" : "cyk6" }
- { "_id" : 7, "name" : "cyk7" }
- { "_id" : 8, "name" : "cyk8" }
- { "_id" : 9, "name" : "cyk9" }
- > db.user.find();
- { "_id" : 0, "name" : "cyk0" }
- { "_id" : 1, "name" : "cyk1" }
- { "_id" : 2, "name" : "cyk2" }
- { "_id" : 3, "name" : "cyk3" }
- { "_id" : 4, "name" : "cyk4" }
- { "_id" : 5, "name" : "cyk5" }
- { "_id" : 6, "name" : "cyk6" }
- { "_id" : 7, "name" : "cyk7" }
- { "_id" : 8, "name" : "cyk8" }
- { "_id" : 9, "name" : "cyk9" }
- >
- > db.user.find({_id: {$ne: 5}})
- { "_id" : 0, "name" : "cyk0" }
- { "_id" : 1, "name" : "cyk1" }
- { "_id" : 2, "name" : "cyk2" }
- { "_id" : 3, "name" : "cyk3" }
- { "_id" : 4, "name" : "cyk4" }
- { "_id" : 6, "name" : "cyk6" }
- { "_id" : 7, "name" : "cyk7" }
- { "_id" : 8, "name" : "cyk8" }
- { "_id" : 9, "name" : "cyk9" }
- >
- > db.user.find();
- { "_id" : 0, "name" : "cyk0" }
- { "_id" : 1, "name" : "cyk1" }
- { "_id" : 2, "name" : "cyk2" }
- { "_id" : 3, "name" : "cyk3" }
- { "_id" : 4, "name" : "cyk4" }
- { "_id" : 5, "name" : "cyk5" }
- { "_id" : 6, "name" : "cyk6" }
- { "_id" : 7, "name" : "cyk7" }
- { "_id" : 8, "name" : "cyk8" }
- { "_id" : 9, "name" : "cyk9" }
- >
- > db.user.find({_id: 5, name: "cyk5"});
- { "_id" : 5, "name" : "cyk5" }
- >
如果 and 查询字段相同的有多个,那么只有最后一个生效.
- > db.user.find();
- { "_id" : 0, "name" : "cyk0" }
- { "_id" : 1, "name" : "cyk1" }
- { "_id" : 2, "name" : "cyk2" }
- { "_id" : 3, "name" : "cyk3" }
- { "_id" : 4, "name" : "cyk4" }
- { "_id" : 5, "name" : "cyk5" }
- { "_id" : 6, "name" : "cyk6" }
- { "_id" : 7, "name" : "cyk7" }
- { "_id" : 8, "name" : "cyk8" }
- { "_id" : 9, "name" : "cyk9" }
- >
- > db.user.find({name: cyk2, name: cyk3})
- uncaught exception: ReferenceError: cyk2 is not defined :
- @(shell):1:15
- > db.user.find({name: "cyk2", name: "cyk3"})
- { "_id" : 3, "name" : "cyk3" }
这里需要使用关键字 $or 表示 "或者"
- > db.user.find();
- { "_id" : 0, "name" : "cyk0" }
- { "_id" : 1, "name" : "cyk1" }
- { "_id" : 2, "name" : "cyk2" }
- { "_id" : 3, "name" : "cyk3" }
- { "_id" : 4, "name" : "cyk4" }
- { "_id" : 5, "name" : "cyk5" }
- { "_id" : 6, "name" : "cyk6" }
- { "_id" : 7, "name" : "cyk7" }
- { "_id" : 8, "name" : "cyk8" }
- { "_id" : 9, "name" : "cyk9" }
- >
- > db.user.find({$or: [{name: "cyk1"}, {name: "cyk2"}]})
- { "_id" : 1, "name" : "cyk1" }
- { "_id" : 2, "name" : "cyk2" }
- >
- > db.user.find();
- { "_id" : 0, "name" : "cyk0" }
- { "_id" : 1, "name" : "cyk1" }
- { "_id" : 2, "name" : "cyk2" }
- { "_id" : 3, "name" : "cyk3" }
- { "_id" : 4, "name" : "cyk4" }
- { "_id" : 5, "name" : "cyk5" }
- { "_id" : 6, "name" : "cyk6" }
- { "_id" : 7, "name" : "cyk7" }
- { "_id" : 8, "name" : "cyk8" }
- { "_id" : 9, "name" : "cyk9" }
- >
- > db.user.find({_id: {$gt:5}, $or: [{name: "cyk7"}, {name: "cyk8"}]})
- { "_id" : 7, "name" : "cyk7" }
- { "_id" : 8, "name" : "cyk8" }
- >
- > db.user.find();
- { "_id" : 0, "name" : "cyk0" }
- { "_id" : 1, "name" : "cyk1" }
- { "_id" : 2, "name" : "cyk2" }
- { "_id" : 3, "name" : "cyk3" }
- { "_id" : 4, "name" : "cyk4" }
- { "_id" : 5, "name" : "cyk5" }
- { "_id" : 6, "name" : "cyk6" }
- { "_id" : 7, "name" : "cyk7" }
- { "_id" : 8, "name" : "cyk8" }
- { "_id" : 9, "name" : "cyk9" }
- { "_id" : 10, "name" : "cyk10", "likes" : [ "敲代码", "唱歌", "弹钢琴" ] }
- >
- > db.user.find({likes: "唱歌"})
- { "_id" : 10, "name" : "cyk10", "likes" : [ "敲代码", "唱歌", "弹钢琴" ] }
- >
也可以按照数组的长度查询指定文档.
- > db.user.find();
- { "_id" : 0, "name" : "cyk0" }
- { "_id" : 1, "name" : "cyk1" }
- { "_id" : 2, "name" : "cyk2" }
- { "_id" : 3, "name" : "cyk3" }
- { "_id" : 4, "name" : "cyk4" }
- { "_id" : 5, "name" : "cyk5" }
- { "_id" : 6, "name" : "cyk6" }
- { "_id" : 7, "name" : "cyk7" }
- { "_id" : 8, "name" : "cyk8" }
- { "_id" : 9, "name" : "cyk9" }
- { "_id" : 10, "name" : "cyk10", "likes" : [ "敲代码", "唱歌", "弹钢琴" ] }
- >
- > db.user.find({likes: {$size: 3}})
- { "_id" : 10, "name" : "cyk10", "likes" : [ "敲代码", "唱歌", "弹钢琴" ] }
- >
例如 SQL 中的 where name like '%y%',在 MongoDB 中可以使用正则表达式实现近似模糊查询功能.
- > db.user.find();
- { "_id" : 0, "name" : "cyk0" }
- { "_id" : 1, "name" : "cyk1" }
- { "_id" : 2, "name" : "cyk2" }
- { "_id" : 3, "name" : "cyk3" }
- { "_id" : 4, "name" : "cyk4" }
- { "_id" : 5, "name" : "cyk5" }
- { "_id" : 6, "name" : "cyk6" }
- { "_id" : 7, "name" : "cyk7" }
- { "_id" : 8, "name" : "cyk8" }
- { "_id" : 9, "name" : "cyk9" }
- { "_id" : 10, "name" : "cyk10", "likes" : [ "敲代码", "唱歌", "弹钢琴" ] }
- >
- > db.user.find({likes: /钢/})
- { "_id" : 10, "name" : "cyk10", "likes" : [ "敲代码", "唱歌", "弹钢琴" ] }
- >
1 表示升序,-1 表示降序
- > db.user.find();
- { "_id" : 0, "name" : "cyk0" }
- { "_id" : 1, "name" : "cyk1" }
- { "_id" : 2, "name" : "cyk2" }
- { "_id" : 3, "name" : "cyk3" }
- { "_id" : 4, "name" : "cyk4" }
- { "_id" : 5, "name" : "cyk5" }
- { "_id" : 6, "name" : "cyk6" }
- { "_id" : 7, "name" : "cyk7" }
- { "_id" : 8, "name" : "cyk8" }
- { "_id" : 9, "name" : "cyk9" }
- { "_id" : 10, "name" : "cyk10", "likes" : [ "敲代码", "唱歌", "弹钢琴" ] }
- >
- > db.user.find().sort({_id: -1})
- { "_id" : 10, "name" : "cyk10", "likes" : [ "敲代码", "唱歌", "弹钢琴" ] }
- { "_id" : 9, "name" : "cyk9" }
- { "_id" : 8, "name" : "cyk8" }
- { "_id" : 7, "name" : "cyk7" }
- { "_id" : 6, "name" : "cyk6" }
- { "_id" : 5, "name" : "cyk5" }
- { "_id" : 4, "name" : "cyk4" }
- { "_id" : 3, "name" : "cyk3" }
- { "_id" : 2, "name" : "cyk2" }
- { "_id" : 1, "name" : "cyk1" }
- { "_id" : 0, "name" : "cyk0" }
- >
- > db.user.find();
- { "_id" : 0, "name" : "cyk0" }
- { "_id" : 1, "name" : "cyk1" }
- { "_id" : 2, "name" : "cyk2" }
- { "_id" : 3, "name" : "cyk3" }
- { "_id" : 4, "name" : "cyk4" }
- { "_id" : 5, "name" : "cyk5" }
- { "_id" : 6, "name" : "cyk6" }
- { "_id" : 7, "name" : "cyk7" }
- { "_id" : 8, "name" : "cyk8" }
- { "_id" : 9, "name" : "cyk9" }
- { "_id" : 10, "name" : "cyk10", "likes" : [ "敲代码", "唱歌", "弹钢琴" ] }
- >
- > db.user.find().count();
- 11
- >
类似于 MySQL 的 limit ... offset ...
- > db.user.find();
- { "_id" : 0, "name" : "cyk0" }
- { "_id" : 1, "name" : "cyk1" }
- { "_id" : 2, "name" : "cyk2" }
- { "_id" : 3, "name" : "cyk3" }
- { "_id" : 4, "name" : "cyk4" }
- { "_id" : 5, "name" : "cyk5" }
- { "_id" : 6, "name" : "cyk6" }
- { "_id" : 7, "name" : "cyk7" }
- { "_id" : 8, "name" : "cyk8" }
- { "_id" : 9, "name" : "cyk9" }
- { "_id" : 10, "name" : "cyk10", "likes" : [ "敲代码", "唱歌", "弹钢琴" ] }
- >
- > db.user.find().skip(3).limit(3);
- { "_id" : 3, "name" : "cyk3" }
- { "_id" : 4, "name" : "cyk4" }
- { "_id" : 5, "name" : "cyk5" }
- > db.user.find().skip(0).limit(3);
- { "_id" : 0, "name" : "cyk0" }
- { "_id" : 1, "name" : "cyk1" }
- { "_id" : 2, "name" : "cyk2" }
- >
- > db.user.distinct('name')
- [
- "cyk0",
- "cyk1",
- "cyk10",
- "cyk2",
- "cyk3",
- "cyk4",
- "cyk5",
- "cyk6",
- "cyk7",
- "cyk8",
- "cyk9"
- ]
- >
语法: db.集合名.find({查询条件}, {指定字段: 1, ...})
1 表示返回,0 表示不反悔.
Ps:1 和 0 不能同时使用.
- > db.user.find();
- { "_id" : 0, "name" : "cyk0" }
- { "_id" : 1, "name" : "cyk1" }
- { "_id" : 2, "name" : "cyk2" }
- { "_id" : 3, "name" : "cyk3" }
- { "_id" : 4, "name" : "cyk4" }
- { "_id" : 5, "name" : "cyk5" }
- { "_id" : 6, "name" : "cyk6" }
- { "_id" : 7, "name" : "cyk7" }
- { "_id" : 8, "name" : "cyk8" }
- { "_id" : 9, "name" : "cyk9" }
- { "_id" : 10, "name" : "cyk10", "likes" : [ "敲代码", "唱歌", "弹钢琴" ] }
- >
- > db.user.find({_id :{$gt: 5}}, {name: 1})
- { "_id" : 6, "name" : "cyk6" }
- { "_id" : 7, "name" : "cyk7" }
- { "_id" : 8, "name" : "cyk8" }
- { "_id" : 9, "name" : "cyk9" }
- { "_id" : 10, "name" : "cyk10" }
- > db.user.find({_id :{$gt: 5}}, {name: 0})
- { "_id" : 6 }
- { "_id" : 7 }
- { "_id" : 8 }
- { "_id" : 9 }
- { "_id" : 10, "likes" : [ "敲代码", "唱歌", "弹钢琴" ] }
- > db.user.find({_id :{$gt: 5}}, {_id: 0})
- { "name" : "cyk6" }
- { "name" : "cyk7" }
- { "name" : "cyk8" }
- { "name" : "cyk9" }
- { "name" : "cyk10", "likes" : [ "敲代码", "唱歌", "弹钢琴" ] }
- >
$ type 操作符是基于 BSON 类型来检索集合中匹配的数据类型,并返回结果.
MongoDB 中可以使用的类型如下:
Ps:查询的时候类型要全小写
例如我插入了如下文档:
- > db.aaa.insert({_id: 1, tar: 1})
- WriteResult({ "nInserted" : 1 })
- >
- > db.aaa.insert({_id: 2, tar: "cyk"})
- WriteResult({ "nInserted" : 1 })
- >
- > db.aaa.insert({_id: 3, tar: true})
- WriteResult({ "nInserted" : 1 })
- >
- > db.aaa.insert({_id: 4, tar: ['aaa', 'bbb', 'ccc']})
- >
- > db.aaa.insert({_id: 5, tar: 1.2})
- WriteResult({ "nInserted" : 1 })
- >
- > db.aaa.find();
- { "_id" : 1, "tar" : 1 }
- { "_id" : 2, "tar" : "cyk" }
- { "_id" : 3, "tar" : true }
- { "_id" : 4, "tar" : [ "aaa", "bbb", "ccc" ] }
- { "_id" : 5, "tar" : 1.2 }
a)现在需要查询 tar 类型为 array 的数据,则可以使用以下命令:
- > db.aaa.find({tar: {$type: 'array'}})
- { "_id" : 4, "tar" : [ "aaa", "bbb", "ccc" ] }
b)现在需要查询 tar 类型为 string 的数据(字符串数组也算),则可以使用以下命令:
- > db.aaa.find({tar: {$type: 'string'}})
- { "_id" : 2, "tar" : "cyk" }
- { "_id" : 4, "tar" : [ "aaa", "bbb", "ccc" ] }
- >
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。