服务器之家:专注于服务器技术及软件下载分享
分类导航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|数据库技术|

服务器之家 - 数据库 - MongoDB - 详解MongoDB的条件查询和排序

详解MongoDB的条件查询和排序

2021-08-23 18:30岛上码农 MongoDB

MongoDB 提供了丰富的查询功能,包括条件组合、反向查询、查询结果过滤、排序等,借助 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使用zabbix监控mongodb的方法

    使用zabbix监控mongodb的方法

    MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。通过本文给大家介绍使用zabbix监控mongodb的...

    下善若火7512020-05-05
  • MongoDBMongoDB中如何使用JOIN操作详解

    MongoDB中如何使用JOIN操作详解

    相信大家都知道mongodb是不支持join操作的,因此我们只能自己来实现这个功能。所以下面这篇文章主要给大家介绍了关于在MongoDB中如何使用JOIN操作的相关资...

    都市烟火7192020-05-13
  • MongoDBmongoDB在windows下安装与配置方案

    mongoDB在windows下安装与配置方案

    本文详细介绍了在windows系统下安装与配置mongoDB的详细过程,非常的全面,有需要的小伙伴自己参考下吧 ...

    MongoDB教程网3462020-04-29
  • MongoDB详解mongodb搭建Replica Set的方法

    详解mongodb搭建Replica Set的方法

    这篇文章主要介绍了mongodb搭建Replica Set的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...

    任何时候努力都不会迟8612021-01-03
  • MongoDBMongodb数据库的备份与恢复操作实例

    Mongodb数据库的备份与恢复操作实例

    这篇文章主要介绍了Mongodb数据库的备份与恢复操作实例,本文讲解使用命令在控制台执行实现Mongodb的备份与恢复操作,需要的朋友可以参考下 ...

    MongoDB教程网4322020-04-29
  • MongoDBMongoDB的Master-Slave主从模式配置及主从复制要点解析

    MongoDB的Master-Slave主从模式配置及主从复制要点解析

    主从复制是数据库运维中一种常见的备份方式,这里我们来看一下MongoDB的Master-Slave主从模式配置及主从复制要点解析,需要的朋友可以参考下 ...

    Hunk Shi3872020-05-06
  • MongoDBMongoDB查询操作限制返回字段的方法

    MongoDB查询操作限制返回字段的方法

    这篇文章主要介绍了MongoDB查询操作限制返回字段的方法,需要的朋友可以参考下 ...

    MongoDB教程网6142020-04-24
  • MongoDBmongo数据集合属性中存在点号(.)的解决方法

    mongo数据集合属性中存在点号(.)的解决方法

    这篇文章主要给大家介绍了关于mongo数据集合属性中存在点号(.)的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学...

    鸡犬相闻4272020-05-19