好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

详解MongoDB的条件查询和排序

find 方法

查询的基本格式是db.collection.find({条件}),其中条件是可选的,类似于 MySQL 的 WHERE 条件一样。示例如下:

?

1

2

3

4

5

6

//  查找全部文档

db.collection.find({});

// 查找指定条件的文档

db.collection.find({key: value});

// 查找昵称为岛上码农的用户

db.users.find({nickname: '岛上码农' });

条件组合

可以使用 $and、$or 和 $not 来设置组合条件。

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

// AND 查询格式

db.collection.find({

   $and: [

     {key1: value1}, {key2: value2}

   ]

});

 

// OR 查询格式

db.collection.find({

   $or: [

     {key1: value1}, {key2: value2}

   ]

});

 

// NOT 查询格式

db.collection.find(

     {key: {$not: {条件表达式}}

);

例如下面的 users数据集:

?

1

2

3

4

5

[

   {nickname: '岛上码农' , score: 90, gender: 'male' },

   {nickname: '玛丽' , score: 98, gender: 'female' },

   {nickname: 'Tom' , score: 76, gender: 'male' }

]

查找分数是90或76分的用户:

?

1

2

3

4

5

db.users.find({

   $or: [

     {score: 90}, {score: 76}

   ]

});

查找性别不是 male 的用户和查找分数高于80分用户:

?

1

2

3

4

5

6

7

db.users.find({

   gender: {$not: {$eq: 'male' }}

});

 

db.users.find({

   score: {$not: {$lt: 80}}

});

其中$eq为相等条件,$lt为小于条件。 条件可以嵌套使用,例如and和and和or 嵌套,表示(a || b) && (c || d),格式如下:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

// AND与OR 嵌套查询格式

db.collection.find({

   $and: [

     {$or: [{key1: value1}, {key2: value2}]},

     {$or: [{key3: value1}, {key4: value2}]},

   ]

});

//查找 nickename是岛上码农或玛丽,且分数是90或76的用户

db.users.find({

   $and: [

     {$or: [{nickname: '岛上码农' }, {nickname: '玛丽' }]},

     {$or: [{score: 90}, {score: 76}]}

   ]

});

//查找 nickname是岛上码农且分数是90,或nickname是玛丽且分数是76的用户

db.users.find({

   $or: [

     {$and: [{nickname: '岛上码农' }, {score: 90}]},

     {$and: [{nickname: '玛丽' }, {score: 76}]}

   ]

});

//查找nickname是岛上码农,且分数不低于80分的用户

db.users.find({

   $and: [

     {nickname: '岛上码农' },

     {score: {$not:{$lt: 80}}}

   ]

});

比较操作符

在 MongoDB 提供了如下比较操作符,比较操作符的格式为{key: {$op: value}}:

$eq:相等操作符,即 a == b; $gt:大于,即 a > b; $gte:大于等于,即 a >= b; $lt:小于,即 a < b; $lte:小于等于,即 a <= b。

IN 查询

in 查询的格式和比较操作符类似,只是对应的值是数组,即

?

1

db.collection.find({key: {$ in : [...]}});

例如,需要查找分数为90,76的用户:

?

1

db.users.find({score: {$ in : [76, 90]}});

in 查询也可以和其他条件组合,如and 查询:

?

1

2

3

4

5

6

db.users.find({

  $and: [

    {score: {$ in : [76, 90]}},

    {gender: 'male' }

    ]

});

限制返回结果条数和跳过数据

find 方法会将所有匹配条件的数据查找出来,因此对于数据集很大的时候会导致速度很慢且产生大量的 磁盘 I/O,如果确定数据只有1条的时候可以使用 findOne,如果要限制查询条数可以使用 limit或 skip。limit 是查询到指定数量后的结果就返回,而 skip 是跳过前面指定数量的结果。

?

1

2

3

4

5

6

7

8

// 查找指定条件的文档的 n 条数据

db.collection.find({key: value}).limit(n);

//示例:查询超过80分的3个用户

db.users.find({score: {$gt: 80}}).limit(3);

// 查找指定条件的文档的,跳过前 n 条数据

db.collection.find({key: value}).skip(n);

//示例: 查询超过80分的用户,跳过前3个

db.users.find({score: {$gt: 80}}).skip(3);

排序

排序使用格式如下:

?

1

db.collection.find({条件}).sort({key: 1});

其中1表示升序,-1表示降序,例如我们需要以分数降序排序:

?

1

db.users.find().sort({score: -1});

总结

本篇介绍了 MongoDB 的条件查询操作,限制返回条数和排序。可以看到,MongoDB 的操作虽然语法和 SQL 不同,但是都有对应的功能辅助查询,对于查询来说也是十分便捷的。

以上就是详解MongoDB的条件查询和排序的详细内容,更多关于MongoDB的条件查询和排序的资料请关注服务器之家其它相关文章!

原文链接:https://juejin.cn/post/6976622501828755492

查看更多关于详解MongoDB的条件查询和排序的详细内容...

  阅读:35次