本文将会介绍 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. scheduled sampling_seq2seq
  2. 汇总|目标检测中的数据增强、backbone、head、neck、损失函数
  3. Cnyunwei-Cacti+Nagios安装说明
  4. 将文字自动转为banner打印形式的工具
  5. 「后端小伙伴来学前端了」Vue中Props配合自定义方法实现组件间的通信
  6. flex 会使div撑满_如何讲清楚Flex弹性盒模型?(中)
  7. c语言多维数组基础知识,C语言基础第7章多维数组.ppt
  8. 优化小技巧——复杂属性对象的read模式
  9. Theano 更多示例
  10. java的基本结构_【Java基础】基本程序设计结构
  11. 计算机控制考试试卷及答案,计算机控制系统A考试试卷带答案.doc
  12. 过滤SQL关键字 防注入
  13. 主板声卡坏了会不会有电流声_不同领域适使用不同类型声卡,千万别选错了~~~...
  14. Matlab的主成分分析
  15. 计算机财务管理复利现值的公式,财务管理公式汇总
  16. OpenStack资源整理(转自陈沙克)
  17. 网络架构采用 bs/cs 混搭模式_最高处|SM一姐出道20年充满偶像气质天生音乐才能还有最高级的混搭_休闲...
  18. RetinaFace人脸检测使用
  19. 82055-94-5|N3-PEG-N3|Azide-PEG-Azide|叠氮PEG叠氮可修饰蛋白质
  20. 计算机组成原理之基本组成

热门文章

  1. 区块链2.0应用——以太坊
  2. ROS入门之使用命令行工具控制小海龟移动
  3. 父子mounted生命周期顺序导致的问题解决
  4. PLDA宣布在其XpressLINK™系列CXL控制器IP中支持CXL™ 2.0
  5. 浅谈Redis分布式锁的进化史
  6. 西藏2020年计算机二级报名时间,西藏2020年3月计算机二级考试时间安排
  7. Azure机器学习——创建Azure机器学习服务
  8. erlang xml 解析_用yecc(erlang)写一个json解析器
  9. “智慧工地+BIM”为建筑企业智慧化管理加码
  10. ubuntu安装firewalld 防火墙