详解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 orm框架的注意事项及简单使用
Jun 20 MongoDB
详解MongoDB的条件查询和排序
Jun 23 MongoDB
关于CentOS 8 搭建MongoDB4.4分片集群的问题
Oct 24 MongoDB
SpringBoot系列之MongoDB Aggregations用法详解
Feb 12 MongoDB
MongoDB使用场景总结
Feb 24 MongoDB
一次线上mongo慢查询问题排查处理记录
Mar 18 MongoDB
mongoDB数据库索引快速入门指南
Mar 23 MongoDB
MongoDB支持的数据类型
Apr 11 MongoDB
MongoDB支持的索引类型
Apr 11 MongoDB
MongoDB修改oplog大小的四种方法
Apr 11 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 ci 获取表单中多个同名input元素值的代码
2016/03/25 PHP
[原创]php集成安装包wampserver修改密码后phpmyadmin无法登陆的解决方法
2016/11/23 PHP
js防止表单重复提交实现代码
2012/09/05 Javascript
利用js正则表达式验证手机号,email地址,邮政编码
2014/01/23 Javascript
解决jquery实现的radio重新选中的问题
2015/07/03 Javascript
KnockoutJS 3.X API 第四章之数据控制流with绑定
2016/10/10 Javascript
微信开发之调起摄像头、本地展示图片、上传下载图片实例
2016/12/08 Javascript
微信小程序 input输入框控件详解及实例(多种示例)
2016/12/14 Javascript
vue 请求后台数据的实例代码
2017/06/22 Javascript
Mongoose实现虚拟字段查询的方法详解
2017/08/15 Javascript
jQuery Layer弹出层传值到父页面的实现代码
2017/08/17 jQuery
使用jQuery 操作table 完成单元格合并的实例
2017/12/27 jQuery
详解Puppeteer 入门教程
2018/05/09 Javascript
老生常谈JavaScript获取CSS样式的方法(兼容各浏览器)
2018/09/19 Javascript
Vue2.0 实现页面缓存和不缓存的方式
2019/11/12 Javascript
JavaScript装饰者模式原理与用法实例详解
2020/03/09 Javascript
Vue 中使用lodash对事件进行防抖和节流操作
2020/07/26 Javascript
jQuery实现动态操作table行
2020/11/23 jQuery
Vue中使用wangeditor富文本编辑的问题
2021/02/07 Vue.js
python通过pil模块获得图片exif信息的方法
2015/03/16 Python
详解Python2.x中对Unicode编码的使用
2015/04/03 Python
Python中矩阵创建和矩阵运算方法
2018/08/04 Python
pytorch 批次遍历数据集打印数据的例子
2019/12/30 Python
关于tf.nn.dynamic_rnn返回值详解
2020/01/20 Python
CSS教程:CSS3圆角属性
2009/04/02 HTML / CSS
纯css3实现鼠标经过图片显示描述的动画效果
2014/09/01 HTML / CSS
Currentbody澳大利亚:美容仪专家
2019/11/11 全球购物
怎样写演讲稿
2014/01/04 职场文书
大学军训感言1000字
2014/02/25 职场文书
电子专业求职信
2014/06/19 职场文书
广告学专业求职信
2014/06/19 职场文书
矛盾论读书笔记
2015/06/29 职场文书
2016年清明节网上祭英烈活动总结
2016/04/01 职场文书
Html5获取用户当前位置的几种方式
2022/01/18 HTML / CSS
winserver2019安装软件一直卡在应用程序正在为首次使用做准备
2022/06/10 Servers
Python绘制散点图之可视化神器pyecharts
2022/07/07 Python