详解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使用profile分析慢查询的步骤
Apr 30 MongoDB
MongoDB balancer的使用详解
Apr 30 MongoDB
MongoDB数据库的安装步骤
Jun 18 MongoDB
MongoDB数据库常用的10条操作命令
Jun 18 MongoDB
MongoDB orm框架的注意事项及简单使用
Jun 20 MongoDB
详解MongoDB的条件查询和排序
Jun 23 MongoDB
浅析MongoDB之安全认证
Jun 26 MongoDB
mongodb数据库迁移变更的解决方案
Sep 04 MongoDB
一次线上mongo慢查询问题排查处理记录
Mar 18 MongoDB
Centos系统通过Docker安装并搭建MongoDB数据库
Apr 12 MongoDB
SpringBoot集成MongoDB实现文件上传的步骤
Apr 18 MongoDB
NoSQL优缺点与MongoDB数据库简介
Jun 05 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
DOM XPATH获取img src值的query
2013/09/23 PHP
php上传文件常见问题总结
2015/02/03 PHP
PHP中的数组处理函数实例总结
2016/01/09 PHP
php实现文件与16进制相互转换的方法示例
2017/02/16 PHP
浅谈laravel数据库查询返回的数据形式
2019/10/21 PHP
Laravel 解决composer相关操作提示php相关异常的问题
2019/10/23 PHP
PHP7 字符串处理机制修改
2021/03/09 PHP
通过百度地图获取公交线路的站点坐标的js代码
2012/05/11 Javascript
向当前style sheet中插入一个新的style实现方法
2013/04/01 Javascript
js 剪切板的用法(clipboardData.setData)与js match函数介绍
2013/11/19 Javascript
javascript利用apply和arguments复用方法
2013/11/25 Javascript
PHP守护进程实例
2015/03/06 Javascript
AngularJS 使用$sce控制代码安全检查
2016/01/05 Javascript
常用的几个JQuery代码片段
2017/03/13 Javascript
Vue 子组件与数据传递问题及注意事项
2019/07/11 Javascript
JavaScript实现猜数字游戏
2020/05/20 Javascript
使用webpack5从0到1搭建一个react项目的实现步骤
2020/12/16 Javascript
jquery自定义组件实例详解
2020/12/31 jQuery
Python3生成手写体数字方法
2018/01/30 Python
python实现决策树分类
2018/08/30 Python
Python的pygame安装教程详解
2020/02/10 Python
Python 爬虫批量爬取网页图片保存到本地的实现代码
2020/12/24 Python
全面总结使用CSS实现水平垂直居中效果的方法
2016/03/10 HTML / CSS
美国首屈一指的高品质珠宝设计师和零售商:Allurez
2018/01/23 全球购物
安全大检查实施方案
2014/02/22 职场文书
国窖1573广告词
2014/03/21 职场文书
安全宣传标语
2014/06/10 职场文书
员工工作自我评价
2014/09/26 职场文书
四风问题班子对照检查材料
2014/09/27 职场文书
党员个人整改措施
2014/10/24 职场文书
个人求职自荐信范文
2015/03/06 职场文书
2015年学校体育工作总结
2015/04/22 职场文书
2019送给家人们的中秋节祝福语
2019/08/15 职场文书
Python基础学习之奇异的GUI对话框
2021/05/27 Python
python基础之文件操作
2021/10/24 Python
Python中异常处理用法
2021/11/27 Python