详解MongoDB的条件查询和排序


Posted in MongoDB onJune 23, 2021
目录
  • find 方法
  • 条件组合
  • 比较操作符
  • IN 查询
  • 限制返回结果条数和跳过数据
  • 排序
  • 总结

 

find 方法

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

//  查找全部文档
db.collection.find({});
// 查找指定条件的文档
db.collection.find({key: value});
// 查找昵称为岛上码农的用户
db.users.find({nickname: '岛上码农'});

 

条件组合

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

// 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数据集:

[
  {nickname: '岛上码农', score: 90, gender: 'male'}, 
  {nickname: '玛丽', score: 98, gender: 'female'}, 
  {nickname: 'Tom', score: 76, gender: 'male'}
]

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

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

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

db.users.find({
  gender: {$not: {$eq: 'male'}}
});

db.users.find({
  score: {$not: {$lt: 80}}
});

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

// 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 查询的格式和比较操作符类似,只是对应的值是数组,即

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

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

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

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

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

 

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

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

// 查找指定条件的文档的 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);

 

排序

排序使用格式如下:

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

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

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

 

总结

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

以上就是详解MongoDB的条件查询和排序的详细内容,更多关于MongoDB的条件查询和排序的资料请关注三水点靠木其它相关文章!

MongoDB 相关文章推荐
MongoDB balancer的使用详解
Apr 30 MongoDB
MongoDB数据库的安装步骤
Jun 18 MongoDB
MongoDB orm框架的注意事项及简单使用
Jun 20 MongoDB
SpringBoot整合MongoDB的实现步骤
Jun 23 MongoDB
mongodb的安装和开机自启动详细讲解
Aug 02 MongoDB
阿里云服务器部署mongodb的详细过程
Sep 04 MongoDB
mongodb清除连接和日志的正确方法分享
Sep 15 MongoDB
MongoDB使用场景总结
Feb 24 MongoDB
MongoDB修改oplog大小的四种方法
Apr 11 MongoDB
SpringBoot集成MongoDB实现文件上传的步骤
Apr 18 MongoDB
详解MongoDB排序时内存大小限制与创建索引的注意事项
May 06 MongoDB
MongoDB使用profile分析慢查询的步骤
Apr 30 #MongoDB
MongoDB balancer的使用详解
Apr 30 #MongoDB
MongoDB数据库的安装步骤
Jun 18 #MongoDB
MongoDB数据库常用的10条操作命令
Jun 18 #MongoDB
MongoDB 常用的crud操作语句
Jun 20 #MongoDB
MongoDB orm框架的注意事项及简单使用
Jun 20 #MongoDB
SpringBoot整合MongoDB的实现步骤
Jun 23 #MongoDB
You might like
星际争霸 Starcraft 秘技补丁
2020/03/14 星际争霸
PHP Curl出现403错误的解决办法
2014/05/29 PHP
PHP使用gearman进行异步的邮件或短信发送操作详解
2020/02/27 PHP
php下的原生ajax请求用法实例分析
2020/02/28 PHP
关于javascript function对象那些迷惑分析
2011/10/24 Javascript
javascript自定义的addClass()方法
2014/05/28 Javascript
详解JS函数重载
2014/12/04 Javascript
VS2008中使用JavaScript调用WebServices
2014/12/18 Javascript
JavaScript中Cookie操作实例
2015/01/09 Javascript
一些实用性较高的js方法
2016/04/19 Javascript
利用Angularjs中模块ui-route管理状态的方法
2016/12/27 Javascript
JS使用正则截取两个字符串之间的字符串实现方法详解
2017/01/06 Javascript
解决ztree搜索中多级菜单展示不全问题
2017/07/05 Javascript
老生常谈js中的MVC
2017/07/25 Javascript
JavaScript实现多叉树的递归遍历和非递归遍历算法操作示例
2018/02/08 Javascript
vue把输入框的内容添加到页面的实例讲解
2019/11/11 Javascript
[39:18]完美世界DOTA2联赛PWL S3 Forest vs LBZS 第二场 12.17
2020/12/19 DOTA
python访问sqlserver示例
2014/02/10 Python
在Python的一段程序中如何使用多次事件循环详解
2017/09/07 Python
python实现微信自动回复功能
2018/04/11 Python
Python 编码规范(Google Python Style Guide)
2018/05/05 Python
python运行时强制刷新缓冲区的方法
2019/01/14 Python
django orm模块中的 is_delete用法
2020/05/20 Python
Python基于pandas绘制散点图矩阵代码实例
2020/06/04 Python
解决pip install psycopg2出错问题
2020/07/09 Python
阿玛尼美妆英国官网:Giorgio Armani Beauty英国
2019/03/28 全球购物
意大利顶级奢侈品电商:LUISAVIAROMA(支持中文)
2020/05/26 全球购物
绩效专员岗位职责
2013/12/02 职场文书
小学运动会报道稿
2014/10/04 职场文书
办公室主任岗位职责范本
2015/03/31 职场文书
2015年信访工作总结
2015/04/07 职场文书
老乡聚会通知
2015/04/23 职场文书
python中requests库+xpath+lxml简单使用
2021/04/29 Python
90后经典动画片排行:《数码宝贝》第二,《小鲤鱼历险记》在榜
2022/03/18 日漫
Python线程池与GIL全局锁实现抽奖小案例
2022/04/13 Python
MySQL池化框架学习接池自定义
2022/07/23 MySQL