本文将会介绍 MongoDB 中查找文档时常用的一些比较运算符,包括 $eq、$gt、$gte、$lt、$lte、$ne、$in 以及 $nin。

$eq 运算符

$eq 运算符用于匹配字段等于(=)指定值的文档。$eq 运算符的语法如下:

{ <field>: { $eq: <value> } }

以上语法等价于下面的写法:

{<field>: <value>}

我们创建一个集合 products 作为下文中的演示:

db.products.insertMany([{ "_id" : 1, "name" : "xPhone", "price" : 799, "releaseDate": ISODate("2011-05-14"), "spec" : { "ram" : 4, "screen" : 6.5, "cpu" : 2.66 },"color":["white","black"],"storage":[64,128,256]},{ "_id" : 2, "name" : "xTablet", "price" : 899, "releaseDate": ISODate("2011-09-01") , "spec" : { "ram" : 16, "screen" : 9.5, "cpu" : 3.66 },"color":["white","black","purple"],"storage":[128,256,512]},{ "_id" : 3, "name" : "SmartTablet", "price" : 899, "releaseDate": ISODate("2015-01-14"), "spec" : { "ram" : 12, "screen" : 9.7, "cpu" : 3.66 },"color":["blue"],"storage":[16,64,128]},{ "_id" : 4, "name" : "SmartPad", "price" : 699, "releaseDate": ISODate("2020-05-14"),"spec" : { "ram" : 8, "screen" : 9.7, "cpu" : 1.66 },"color":["white","orange","gold","gray"],"storage":[128,256,1024]},{ "_id" : 5, "name" : "SmartPhone", "price" : 599,"releaseDate": ISODate("2022-09-14"), "spec" : { "ram" : 4, "screen" : 9.7, "cpu" : 1.66 },"color":["white","orange","gold","gray"],"storage":[128,256]}])

以下示例使用 $eq 运算符查找 products 集合中 price 字段等于 899 的所有文档:

db.products.find({price: {$eq: 899}
}, {name: 1,price: 1
})

我们也可以使用以下等价写法:

db.products.find({price: 899
}, {name: 1,price: 1
})

以上两个示例的返回结果相同:

[{ _id: 2, name: 'xTablet', price: 899 },{ _id: 3, name: 'SmartTablet', price: 899 }
]

下面的示例使用 $eq 运算符查找嵌套文档 spec 中字段 ram 的值等于 4 的文档:

db.products.find({"spec.ram": {$eq: 4}
}, {name: 1,"spec.ram": 1
})

查询返回的文档如下:

[{ _id: 1, name: 'xPhone', spec: { ram: 4 } },{ _id: 5, name: 'SmartPhone', spec: { ram: 4 } }
]

接下来的示例使用 $eq 运算符查找 products 集合中数组 color 包含“black”元素的文档:

db.products.find({color: {$eq: "black"}
}, {name: 1,color: 1
})

查询返回的文档如下:

[{ _id: 1, name: 'xPhone', color: [ 'white', 'black' ] },{ _id: 2, name: 'xTablet', color: [ 'white', 'black', 'purple' ] }
]

$gt 运算符

$gt 运算符用于匹配字段大于(>)指定值的文档。$gt 运算符的语法如下:

{ field: { $gt: value}}

以下示例使用 $gt 运算符查找集合 products 中 price 大于 699 的文档:

db.products.find({price: {$gt: 699}
}, {name: 1,price: 1
})

查询返回的结果如下:

[{ _id: 1, name: 'xPhone', price: 799 },{ _id: 2, name: 'xTablet', price: 899 },{ _id: 3, name: 'SmartTablet', price: 899 }
]

$gte 运算符

$gte 运算符用于匹配字段大于等于(>=)指定值的文档。$gte 运算符的语法如下:

{field: {$gte: value} }

以下示例使用 $gte 运算符查找集合 products 中嵌入文档 spec 的字段 screen 大于或者等于 9.5 的文档:

db.products.find({"spec.screen": {$gte: 9.5}
}, {name: 1,"spec.screen": 1
})

返回结果如下:

[{ _id: 2, name: 'xTablet', spec: { screen: 9.5 } },{ _id: 3, name: 'SmartTablet', spec: { screen: 9.7 } },{ _id: 4, name: 'SmartPad', spec: { screen: 9.7 } },{ _id: 5, name: 'SmartPhone', spec: { screen: 9.7 } }
]

$lt 运算符

$lt 运算符用于匹配字段小于(<)指定值的文档。$lt 运算符的语法如下:

{field: {$lt: value} }

以下示例使用 $lt 运算符查找集合 products 中数组字段 storage 至少包含一个小于 128 的元素的文档:

db.products.find({storage: {$lt: 128}
}, {name: 1,storage: 1
})

查询返回的文档如下:

[{ _id: 1, name: 'xPhone', storage: [ 64, 128, 256 ] },{ _id: 3, name: 'SmartTablet', storage: [ 16, 64, 128 ] }
]

$lte 运算符

$lte 运算符用于匹配字段小于等于(<=)指定值的文档。$lte 运算符的语法如下:

{field: {$lte: value} }

以下示例使用 $lte 运算符查找集合 products 中发布日期早于或者等于 2015-01-11 的所有文档:

db.products.find({"releaseDate": {$lte: new ISODate('2015-01-01')}
}, {name: 1,releaseDate: 1
});

查询返回的文档如下:

[{_id: 1,name: 'xPhone',releaseDate: ISODate("2011-05-14T00:00:00.000Z")},{_id: 2,name: 'xTablet',releaseDate: ISODate("2011-09-01T00:00:00.000Z")}
]

$ne 运算符

$ne 运算符匹配字段不等于(<>)指定值的文档。$ne 运算符的语法如下:

{ field: {$ne: value}}

以下示例使用 $ne 运算符查找集合 products 中 price 不等于 899 的文档:

db.products.find({price: {$ne: 899}
}, {name: 1,price: 1
})

查询返回的文档如下:

[{ _id: 1, name: 'xPhone', price: 799 },{ _id: 4, name: 'SmartPad', price: 699 },{ _id: 5, name: 'SmartPhone', price: 599 },{ _id: 6, name: 'xWidget' }
]

$in 运算符

$in 运算符匹配字段等于(=)数组中任意值的文档。$in 运算符的语法如下:

{ field: { $in: [<value1>, <value2>,...] }}

如果 field 只有一个值,$in 运算符匹配该字段等于数组中任意值的文档。如果 field 也是一个数组,$in 运算符匹配该数组包含数组 [value1, value2,…] 中任意值的文档。

数组列表 value1, value2, … 可以是一个常量列表或者正则表达式列表。

正则表达式是一组定义搜索模式的字符,例如正则表达式 /\d+/ 匹配任何数组,包括1,123,1234 等。

以下示例使用 $in 运算符查找 products 集合中 price 字段等于 599 或者 799 的文档:

db.products.find({price: {$in: [699, 799]}
}, {name: 1,price: 1
})

查询返回的文档如下:

[{ _id: 1, name: 'xPhone', price: 799 },{ _id: 4, name: 'SmartPad', price: 699 }
]

$nin 运算符

$nin 运算符匹配字段不等于(!=)数组中任意值的文档,或者指定字段不存在的文档。$nin 运算符的语法如下:

{ field: { $nin: [ <value1>, <value2> ...]} }

以下示例使用 $nin 运算符查找 products 集合中 price 字段既不等于 599 也不等于 799 的文档:

db.products.find({price: {$nin: [699, 799]}
}, {name: 1,price: 1
})

查询返回的文档如下:

[{ _id: 2, name: 'xTablet', price: 899 },{ _id: 3, name: 'SmartTablet', price: 899 },{ _id: 5, name: 'SmartPhone', price: 599 }
]

以下示例使用 $nin 运算符查找 color 数组字段中不包含任何匹配正则表达式 /^g+/ 或者 /^w+/ 的元素的文档:

db.products.find({color: {$nin: [/^g+/, /^w+/]}
}, {name: 1,color: 1
})

查询返回的文档如下:

[ { _id: 3, name: 'SmartTablet', color: [ 'blue' ] } ]

《MongoDB入门教程》第08篇 比较运算符相关推荐

  1. MongoDB 入门教程实战学习笔记-31-mongo 聚合查询管道 Aggregation Pipieline

    aggregation 聚合操作处理数据记录并返回计算结果. 聚合操作将多个文档中的值组合在一起, 并且可以对分组数据执行各种操作以返回单个结果. mongodb 提供了三种执行聚合的方法: 聚合管道 ...

  2. Systemd 入门教程:实战篇

    Systemd 入门教程:实战篇 原文出处: 阮一峰(@ruanyf)   http://blog.jobbole.com/98671/?utm_source=blog.jobbole.com& ...

  3. Linux Capabilities 入门教程--进阶实战篇

    该系列文章总共分为三篇: Linux Capabilities 入门教程:概念篇 Linux Capabilities 入门教程:基础实战篇 Linux Capabilities 入门教程:进阶实战篇 ...

  4. Linux Capabilities 入门教程--基础实战篇

    该系列文章总共分为三篇: Linux Capabilities 入门教程:概念篇 Linux Capabilities 入门教程:基础实战篇 Linux Capabilities 入门教程:进阶实战篇 ...

  5. Systemd入门教程:命令篇

    Systemd入门教程:命令篇 转自:http://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-commands.html 作者: 阮一峰 日期: ...

  6. 深度学习小白入门教程-基础环境篇

    深度学习小白入门教程-基础环境篇 如有图片显示失败,请回小主主页查看~ Anaconda 安装包下载方式一:官网(科学上网比较慢,不推荐) 安装包下载方式二:清华镜像(推荐) 具体安装步骤(跟着箭头来 ...

  7. 九宫怎么排列和使用_广告视频配音剪映零基础入门教程第二十三篇:剪辑之九宫格教程...

    朋友圈最火九宫格视频你们知道是怎样制作的吗?我们常常在玩朋友圈的时候想用九宫格照片,但是你们有没有遇到这种情况,想玩九宫格却发现找不到那么多能用的照片,那这时候怎么办呢?玩腻了平常图片的发法,今天我们 ...

  8. 《MongoDB入门教程》第11篇 数组运算符

    本文将会介绍 MongoDB 中查找数组元素相关的运算符,包括 $size.$all 以及 $elemMatch. $size 运算符 $size 是一个数组查询运算符,可以判断文档的字段是否包含指定 ...

  9. C++零基础入门教程:基础篇(一)

    前言 嘿嘿,我叕来啦─=≡Σ(((つ•̀ω•́)つ!别问我为什么突然变成了零基础入门教程(一),因为前面那三篇都是基础的不能在基础的教程了.(其实是因为顺序乱了,而且那时候没有单独弄一个专栏,后面我会 ...

  10. FL studio 20简易入门教程 -- 第四篇 -- 钢琴卷帘窗口与单轨乐器编辑界面

    钢琴卷帘窗口与单轨乐器编辑界面 本文经验主要来自于B站爱编曲网官方正版快速入门教程,链接如下: 爱编曲网官方正版快速入门教程 文章目录 钢琴卷帘窗口与单轨乐器编辑界面 前言 单轨乐器编辑界面 上方菜单 ...

最新文章

  1. 精华:软件架构模式的7种武器
  2. matlab创建图形用户界面,Matlab 用户图形界面 基础 (一)
  3. JAVA_Java常用核心包(概念)
  4. 线程信息的获取和设置
  5. ue4 材质表达式分类
  6. yoman不压缩html,使用Yeoman构建vuejs
  7. Hi3516A开发--I2C/SPI读写命令
  8. 互联网各岗位的生存指南
  9. 我所理解的K8S(有彩蛋哦~)
  10. OS开发UI篇—Quartz2D使用(截屏)
  11. SQL Server中的bcp实用工具(批量复制程序)简介
  12. 安全监控、告警及自动化!
  13. c语言文件io的fork,15. C语言的fork
  14. 重装的电脑360打补丁都是智能忽略
  15. 01组-选题与需求分析报告
  16. 芝诺数据高校产学研用成果展示|携程酒店(北京)数据分析报告
  17. 体感ar数字互动教学制作实现学生共享优质教育
  18. 简单的文本编辑器C语言实现
  19. setup factory打包工具的使用
  20. 【分享】WebForm中DataGrid的20篇经典文章

热门文章

  1. jQuery-tmpl 模板引擎使用方法说明
  2. mac装win10检测不到独立显卡
  3. 【概率论与数理统计(研究生课程)】知识点总结8(假设检验)
  4. 这3款文字转换音频的软件能在线文字转音频
  5. 如何解决3Dmax模型不显示材料的问题?
  6. mysql数据库删除数据的三种方式:
  7. 决策树Decision Tree 和随机森林RandomForest基本概念(一)
  8. 数据挖掘算法之-关联规则挖掘(Association Rule)
  9. 富士最快计算机,史上对焦最快卡片DC 富士F305EXR评测
  10. HCNP——DD报文