MongoDB 查询文档(1)

一、查询语法

本篇我们主要讲解在集合或视图中查询文档,首先说明一下查询的语法:

db.collection.find(query, projection, options)

此定义可以从集合或者视图中查找文档并返回一个游标(cursor);

参数

query: 此选项可选,用于指定查询过滤器,如果要查询集合中的所有文档,可省略此参数或者传递空文档{}

projection: 此选项可选,用于指定在文档中返回的字段,如果要返回匹配文档中的所有字段,可省略此参数。

options:此选项可选,用于指定查询的其他选项。可以用于修改查询行为以及返回结果的方法。

返回

一个指向符合查询条件的文档的游标。当 find() 方法"返回文档",该方法实际上是返回一个指向文档的游标。

二、Query选择器

1、比较筛选

1.1 相等($eq)

语法:{ : { $eq: } }

该表达式等效于:

{ :  }

例子:

查询集合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 }

1.2 不相等($ne)

语法:{ : { $ne: } }

例子:

下面我们查询年龄!=20的成员:

db.test.find({"age": { $ne: 20 }});

查询的结果如下:

{ "_id" : ObjectId("642be59ec2efd6c6eacc71fd"), "id" : "1002", "name" : "李四", "age" : 22 }
{ "_id" : ObjectId("642be59ec2efd6c6eacc71fe"), "id" : "1003", "name" : "王五", "age" : 25 }

1.3 大于($gt)

语法:{ : { $gt: } }

例子:

下面我们查询年龄>22的成员:

db.test.find({"age": { $gt: 22 }});

查询的结果如下:

{ "_id" : ObjectId("642be59ec2efd6c6eacc71fe"), "id" : "1003", "name" : "王五", "age" : 25 }

1.4 大于等于($gte)

语法:{ : { $gte: } }

例子:

下面我们查询年龄>=22的成员:

db.test.find({"age": { $gte: 22 }});

查询的结果如下:

{ "_id" : ObjectId("642be59ec2efd6c6eacc71fd"), "id" : "1002", "name" : "李四", "age" : 22 }
{ "_id" : ObjectId("642be59ec2efd6c6eacc71fe"), "id" : "1003", "name" : "王五", "age" : 25 }

1.5 小于($lt)

语法:{ : { $lt: } }

例子:

下面我们查询年龄<22的成员:

db.test.find({"age": { $lt: 22 }});

查询的结果如下:

{ "_id" : ObjectId("642be48ec2efd6c6eacc71fc"), "id" : "1001", "name" : "张三", "age" : 20 }

1.6 小于等于($lte)

语法:{ : { $lte: } }

例子:

下面我们查询年龄<=22的成员:

db.test.find({"age": { $lte: 22 }});

查询的结果如下:

{ "_id" : ObjectId("642be48ec2efd6c6eacc71fc"), "id" : "1001", "name" : "张三", "age" : 20 }
{ "_id" : ObjectId("642be59ec2efd6c6eacc71fd"), "id" : "1002", "name" : "李四", "age" : 22 }

1.7 与数组中的任一值匹配($in)

语法:{ : { $in: [ , , ... ] } }

例子:

下面我们查询年龄等于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 }

1.8 与数组中的值均不匹配($nin)

语法:{ : { $nin: [ , , ... ] } }

例子:

下面我们查询年龄不等于20,22的成员:

db.test.find({"age": { $nin: [ 20, 22 ] }});

查询的结果如下:

{ "_id" : ObjectId("642be59ec2efd6c6eacc71fe"), "id" : "1003", "name" : "王五", "age" : 25 }

2、逻辑筛选

2.1 并且($and)

语法:{ $and: [ { }, { } , ... , { } ] }

查询满足所有表达式的文档。

例子:

下面我们查询年龄大于21并且小于24的成员:

db.test.find(
    { 
        $and: [ 
            {"age": {$lt: 24}}, 
            {"age": {$gt: 21}} 
        ] 
    }
);

查询的结果如下:

{ "_id" : ObjectId("642be59ec2efd6c6eacc71fd"), "id" : "1002", "name" : "李四", "age" : 22 }

2.2 或者($or)

语法:{ $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 }

2.3 非($not)

语法:{ : { $not: { } } }

查询不满足表达式的文档

例子:

下面我们查询年龄不等于22的成员:

db.test.find({ "age": { $not: { $eq: 22 }} });

查询的结果如下:

{ "_id" : ObjectId("642be48ec2efd6c6eacc71fc"), "id" : "1001", "name" : "张三", "age" : 20 }
{ "_id" : ObjectId("642be59ec2efd6c6eacc71fe"), "id" : "1003", "name" : "王五", "age" : 25 }

2.4 或非($nor)

语法:{ $nor: [ { }, { }, ... { } ] }

查询不满足所有表达式的文档

例子:

下面我们查询“年龄不等于22并且姓名不等于张三”的成员:

db.test.find(
    { 
        $nor: [ 
            {"age": {$eq: 22}}, 
            {"name": "张三"} 
        ] 
    }
);

查询的结果如下:

{ "_id" : ObjectId("642be59ec2efd6c6eacc71fe"), "id" : "1003", "name" : "王五", "age" : 25 }

你可能感兴趣的:(MongoDB,mongodb,数据库,nosql)