详解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 常用的crud操作语句
Jun 20 MongoDB
详解MongoDB的条件查询和排序
Jun 23 MongoDB
常用的MongoDB查询语句的示例代码
Jul 25 MongoDB
mongodb数据库迁移变更的解决方案
Sep 04 MongoDB
springboot + mongodb 通过经纬度坐标匹配平面区域的方法
Nov 01 MongoDB
SpringBoot系列之MongoDB Aggregations用法详解
Feb 12 MongoDB
MongoDB使用场景总结
Feb 24 MongoDB
Centos系统通过Docker安装并搭建MongoDB数据库
Apr 12 MongoDB
SpringBoot集成MongoDB实现文件上传的步骤
Apr 18 MongoDB
Mongodb 迁移数据块的流程介绍分析
Apr 18 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
PHP无限分类代码,支持数组格式化、直接输出菜单两种方式
2011/05/18 PHP
主流PHP框架的优缺点对比分析
2014/12/25 PHP
LAMP环境使用Composer安装Laravel的方法
2017/03/25 PHP
PHP面向对象之领域模型+数据映射器实例(分析)
2017/06/21 PHP
让你的PHP,APACHE,NGINX支持大文件上传
2021/03/09 PHP
JavaScript 乱码问题
2009/08/06 Javascript
IE和Firefox的Javascript兼容性总结[推荐收藏]
2011/10/19 Javascript
Javascript让DEDECMS告别手写Tag
2014/09/01 Javascript
js实现图片无缝滚动
2015/12/23 Javascript
实践中学习AngularJS表单
2016/03/21 Javascript
微信小程序 http请求详细介绍
2016/10/09 Javascript
Angular实现的敏感文字自动过滤与提示功能示例
2017/12/29 Javascript
小程序点击图片实现自动播放视频
2020/05/29 Javascript
Vue服务端渲染实践之Web应用首屏耗时最优化方案
2019/03/22 Javascript
原生js实现可兼容PC和移动端的拖动滑块功能详解【测试可用】
2019/08/15 Javascript
javascript前端和后台进行数据交互方法示例
2020/08/07 Javascript
js实现鼠标切换图片(无定时器)
2021/01/27 Javascript
Python实现简单网页图片抓取完整代码实例
2017/12/15 Python
windows环境下tensorflow安装过程详解
2018/03/30 Python
在linux系统下安装python librtmp包的实现方法
2019/07/22 Python
Tensorflow获取张量Tensor的具体维数实例
2020/01/19 Python
jupyter notebook中美观显示矩阵实例
2020/04/17 Python
最简单的matplotlib安装教程(小白)
2020/07/28 Python
Allsole美国/加拿大:英国一家专门出售品牌鞋子的网站
2018/10/21 全球购物
美国女士内衣在线折扣商店:One Hanes Place
2019/03/24 全球购物
美国乒乓球设备、配件和服装品牌:Killerspin
2020/06/07 全球购物
房屋委托书范本
2014/04/04 职场文书
小学语文课后反思精选
2014/04/25 职场文书
领导干部民主生活会自我剖析材料范文
2014/09/20 职场文书
群众路线教育实践活动民主生活会个人检查对照思想汇报
2014/10/04 职场文书
2014年安全员工作总结
2014/11/13 职场文书
工作岗位职责范本
2015/02/15 职场文书
2015年政协委员工作总结
2015/05/20 职场文书
CSS预处理框架——Stylus
2021/04/21 HTML / CSS
详解JAVA中的OPTIONAL
2021/06/14 Java/Android
SpringBoot2零基础到精通之异常处理与web原生组件注入
2022/03/22 Java/Android