本篇我们主要讲解在集合或视图中查询文档,首先说明一下查询的语法:
db.collection.find(query, projection, options)
此定义可以从集合或者视图中查找文档并返回一个游标(cursor);
参数
query: 此选项可选,用于指定查询过滤器,如果要查询集合中的所有文档,可省略此参数或者传递空文档{}
projection: 此选项可选,用于指定在文档中返回的字段,如果要返回匹配文档中的所有字段,可省略此参数。
options:此选项可选,用于指定查询的其他选项。可以用于修改查询行为以及返回结果的方法。
返回
一个指向符合查询条件的文档的游标。当 find() 方法"返回文档",该方法实际上是返回一个指向文档的游标。
语法:{
该表达式等效于:
{
例子:
查询集合test所有的文档:
{ "_id" : ObjectId("642be48ec2efd6c6eacc71fc"), "id" : "1001", "name" : "张三", "age" : 20 }
{ "_id" : ObjectId("642be59ec2efd6c6eacc71fd"), "id" : "1002", "name" : "李四", "age" : 22 }
{ "_id" : ObjectId("642be59ec2efd6c6eacc71fe"), "id" : "1003", "name" : "王五", "age" : 25 }
下面我们查询年龄=20的成员:
db.test.find({"age": { $eq: 20 }});
此查询等效于:
db.test.find({"age": 20});
这两个查询的结果一致,如下:
{ "_id" : ObjectId("642be48ec2efd6c6eacc71fc"), "id" : "1001", "name" : "张三", "age" : 20 }
语法:{
例子:
下面我们查询年龄!=20的成员:
db.test.find({"age": { $ne: 20 }});
查询的结果如下:
{ "_id" : ObjectId("642be59ec2efd6c6eacc71fd"), "id" : "1002", "name" : "李四", "age" : 22 }
{ "_id" : ObjectId("642be59ec2efd6c6eacc71fe"), "id" : "1003", "name" : "王五", "age" : 25 }
语法:{
例子:
下面我们查询年龄>22的成员:
db.test.find({"age": { $gt: 22 }});
查询的结果如下:
{ "_id" : ObjectId("642be59ec2efd6c6eacc71fe"), "id" : "1003", "name" : "王五", "age" : 25 }
语法:{
例子:
下面我们查询年龄>=22的成员:
db.test.find({"age": { $gte: 22 }});
查询的结果如下:
{ "_id" : ObjectId("642be59ec2efd6c6eacc71fd"), "id" : "1002", "name" : "李四", "age" : 22 }
{ "_id" : ObjectId("642be59ec2efd6c6eacc71fe"), "id" : "1003", "name" : "王五", "age" : 25 }
语法:{
例子:
下面我们查询年龄<22的成员:
db.test.find({"age": { $lt: 22 }});
查询的结果如下:
{ "_id" : ObjectId("642be48ec2efd6c6eacc71fc"), "id" : "1001", "name" : "张三", "age" : 20 }
语法:{
例子:
下面我们查询年龄<=22的成员:
db.test.find({"age": { $lte: 22 }});
查询的结果如下:
{ "_id" : ObjectId("642be48ec2efd6c6eacc71fc"), "id" : "1001", "name" : "张三", "age" : 20 }
{ "_id" : ObjectId("642be59ec2efd6c6eacc71fd"), "id" : "1002", "name" : "李四", "age" : 22 }
语法:{
例子:
下面我们查询年龄等于20或者22的成员:
db.test.find({"age": { $in: [ 20, 22 ] }});
查询的结果如下:
{ "_id" : ObjectId("642be48ec2efd6c6eacc71fc"), "id" : "1001", "name" : "张三", "age" : 20 }
{ "_id" : ObjectId("642be59ec2efd6c6eacc71fd"), "id" : "1002", "name" : "李四", "age" : 22 }
语法:{
例子:
下面我们查询年龄不等于20,22的成员:
db.test.find({"age": { $nin: [ 20, 22 ] }});
查询的结果如下:
{ "_id" : ObjectId("642be59ec2efd6c6eacc71fe"), "id" : "1003", "name" : "王五", "age" : 25 }
语法:{ $and: [ {
查询满足所有表达式的文档。
例子:
下面我们查询年龄大于21并且小于24的成员:
db.test.find(
{
$and: [
{"age": {$lt: 24}},
{"age": {$gt: 21}}
]
}
);
查询的结果如下:
{ "_id" : ObjectId("642be59ec2efd6c6eacc71fd"), "id" : "1002", "name" : "李四", "age" : 22 }
语法:{ $or: [ {
查询至少满足一个表达式的文档
例子:
下面我们查询年龄小于21或者大于24的成员:
db.test.find(
{
$or: [
{"age": {$gt: 24}},
{"age": {$lt: 21}}
]
}
);
查询的结果如下:
{ "_id" : ObjectId("642be48ec2efd6c6eacc71fc"), "id" : "1001", "name" : "张三", "age" : 20 }
{ "_id" : ObjectId("642be59ec2efd6c6eacc71fe"), "id" : "1003", "name" : "王五", "age" : 25 }
语法:{
查询不满足表达式的文档
例子:
下面我们查询年龄不等于22的成员:
db.test.find({ "age": { $not: { $eq: 22 }} });
查询的结果如下:
{ "_id" : ObjectId("642be48ec2efd6c6eacc71fc"), "id" : "1001", "name" : "张三", "age" : 20 }
{ "_id" : ObjectId("642be59ec2efd6c6eacc71fe"), "id" : "1003", "name" : "王五", "age" : 25 }
语法:{ $nor: [ {
查询不满足所有表达式的文档
例子:
下面我们查询“年龄不等于22并且姓名不等于张三”的成员:
db.test.find(
{
$nor: [
{"age": {$eq: 22}},
{"name": "张三"}
]
}
);
查询的结果如下:
{ "_id" : ObjectId("642be59ec2efd6c6eacc71fe"), "id" : "1003", "name" : "王五", "age" : 25 }