1. find 读取文档
db.<collection>.find(<query>,<projection>)
- query : 定义了读取操作时筛选文档的条件
- projection : 定义了对读取结果进行的投射,也就是只返回某些字段
1.1 读取文档
不进行筛选和投射
> db.user.find()
{ "_id" : "1", "money" : 1000, "name" : "刘一" }
{ "_id" : "2", "money" : 1000, "name" : "陈二" }
{ "_id" : "3", "money" : 1000, "name" : "张三" }
{ "_id" : "4", "money" : 1000, "name" : "李四" }
{ "_id" : "5", "money" : 1000, "name" : "王五" }
{ "_id" : "6", "money" : 1000, "name" : "赵六" }
{ "_id" : "7", "money" : 1000, "name" : "孙七" }
{ "_id" : ObjectId("5fff6a78025e5d9ea86e18cc"), "money" : 1000, "name" : "周八" }
{ "_id" : { "age" : 18, "gender" : "男" }, "money" : 1000, "name" : "吴九" }
>
查询 name 为 张三的文档
> db.user.find({"name":"张三"})
{ "_id" : "3", "money" : 1000, "name" : "张三" }
>
1.2 pretty 格式化显示文档
> db.user.find().pretty()
{ "_id" : "1", "money" : 1000, "name" : "刘一" }
{ "_id" : "2", "money" : 1000, "name" : "陈二" }
{ "_id" : "3", "money" : 1000, "name" : "张三" }
{ "_id" : "4", "money" : 1000, "name" : "李四" }
{ "_id" : "5", "money" : 1000, "name" : "王五" }
{ "_id" : "6", "money" : 1000, "name" : "赵六" }
{ "_id" : "7", "money" : 1000, "name" : "孙七" }
{
"_id" : ObjectId("5fff6a78025e5d9ea86e18cc"),
"money" : 1000,
"name" : "周八"
}
{
"_id" : {
"age" : 18,
"gender" : "男"
},
"money" : 1000,
"name" : "吴九"
}
>
1.3 筛选文档:比较操作符
{<field>:{$<operator>:<value>}}
比较操作符 $<operator>
:
- $eq : 匹配字段值相等的文档
- $ne : 匹配字段值不相等的文档
- $gt : 匹配字段值大于查询值的文档
- $gte : 匹配字段值大于或等于查询值的文档
- $lt : 匹配字段值小于查询值的文档
- $lte : 匹配字段值小于或等于查询值的文档
- KaTeX parse error: Expected '}', got 'EOF' at end of input: …文档 `{<field>:{ in:[,…]}}`
- KaTeX parse error: Expected '}', got 'EOF' at end of input: …文档 `{<field>:{ nin:[,…]}}`
查询 money 等于 1000的文档,和查询 money 大于 1000的文档
# 查询 money 等于 1000的文档
> db.user.find({"money":{$eq: 1000}})
{ "_id" : "1", "money" : 1000, "name" : "刘一" }
{ "_id" : "2", "money" : 1000, "name" : "陈二" }
{ "_id" : "3", "money" : 1000, "name" : "张三" }
{ "_id" : "4", "money" : 1000, "name" : "李四" }
{ "_id" : "5", "money" : 1000, "name" : "王五" }
{ "_id" : "6", "money" : 1000, "name" : "赵六" }
{ "_id" : "7", "money" : 1000, "name" : "孙七" }
{ "_id" : ObjectId("5fff6a78025e5d9ea86e18cc"), "money" : 1000, "name" : "周八" }
{ "_id" : { "age" : 18, "gender" : "男" }, "money" : 1000, "name" : "吴九" }
# 查询 money 大于 1000的文档
> db.user.find({"money":{$gt: 1000}})
>
查询 name 为 张三或者赵六的文档
> db.user.find({"name":{$in: ["张三","赵六"]}})
{ "_id" : "3", "money" : 1000, "name" : "张三" }
{ "_id" : "6", "money" : 1000, "name" : "赵六" }
>
1.3 筛选文档:逻辑操作符
逻辑操作符 $<operator>
:
- $not 匹配筛选条件不成立的文档
- $and 匹配多个筛选条件全部成立的文档
- $or 匹配至少一个筛选条件成立的文档
- $nor 匹配多个筛选条件全部不成立的文档
1.3.1 $and 匹配多个筛选条件全部成立的文档
{$and: [{<expression1>},{<expression2>},...,{<expressionN>}]}
查询 money<2000 , name = 张三 的文档
> db.user.find({$and: [{"money":{$lt:2000}},{"name":"张三"}]})
{ "_id" : "3", "money" : 1000, "name" : "张三" }
>
字段名可以用双引号引起来,也可以不用双引号。
当筛选条件应用在不同的字段上时,可以省略 $and 操作符
查询 money<2000 , name = 张三 的文档,省略 $and
> db.user.find({money:{$lt:2000},name:"张三"})
{ "_id" : "3", "money" : 1000, "name" : "张三" }
>
当筛选条件应用在同一个字段上时,也可以简化命令
查询 money > 500 且 money < 2000 的文档
> db.user.find({money:{$gt:500, $lt:2000}})
{ "_id" : "1", "money" : 1000, "name" : "刘一" }
{ "_id" : "2", "money" : 1000, "name" : "陈二" }
{ "_id" : "3", "money" : 1000, "name" : "张三" }
{ "_id" : "4", "money" : 1000, "name" : "李四" }
{ "_id" : "5", "money" : 1000, "name" : "王五" }
{ "_id" : "6", "money" : 1000, "name" : "