《MongoDB入门教程》第08篇 比较运算符
本文将会介绍 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篇 比较运算符相关推荐
- MongoDB 入门教程实战学习笔记-31-mongo 聚合查询管道 Aggregation Pipieline
aggregation 聚合操作处理数据记录并返回计算结果. 聚合操作将多个文档中的值组合在一起, 并且可以对分组数据执行各种操作以返回单个结果. mongodb 提供了三种执行聚合的方法: 聚合管道 ...
- Systemd 入门教程:实战篇
Systemd 入门教程:实战篇 原文出处: 阮一峰(@ruanyf) http://blog.jobbole.com/98671/?utm_source=blog.jobbole.com& ...
- Linux Capabilities 入门教程--进阶实战篇
该系列文章总共分为三篇: Linux Capabilities 入门教程:概念篇 Linux Capabilities 入门教程:基础实战篇 Linux Capabilities 入门教程:进阶实战篇 ...
- Linux Capabilities 入门教程--基础实战篇
该系列文章总共分为三篇: Linux Capabilities 入门教程:概念篇 Linux Capabilities 入门教程:基础实战篇 Linux Capabilities 入门教程:进阶实战篇 ...
- Systemd入门教程:命令篇
Systemd入门教程:命令篇 转自:http://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-commands.html 作者: 阮一峰 日期: ...
- 深度学习小白入门教程-基础环境篇
深度学习小白入门教程-基础环境篇 如有图片显示失败,请回小主主页查看~ Anaconda 安装包下载方式一:官网(科学上网比较慢,不推荐) 安装包下载方式二:清华镜像(推荐) 具体安装步骤(跟着箭头来 ...
- 九宫怎么排列和使用_广告视频配音剪映零基础入门教程第二十三篇:剪辑之九宫格教程...
朋友圈最火九宫格视频你们知道是怎样制作的吗?我们常常在玩朋友圈的时候想用九宫格照片,但是你们有没有遇到这种情况,想玩九宫格却发现找不到那么多能用的照片,那这时候怎么办呢?玩腻了平常图片的发法,今天我们 ...
- 《MongoDB入门教程》第11篇 数组运算符
本文将会介绍 MongoDB 中查找数组元素相关的运算符,包括 $size.$all 以及 $elemMatch. $size 运算符 $size 是一个数组查询运算符,可以判断文档的字段是否包含指定 ...
- C++零基础入门教程:基础篇(一)
前言 嘿嘿,我叕来啦─=≡Σ(((つ•̀ω•́)つ!别问我为什么突然变成了零基础入门教程(一),因为前面那三篇都是基础的不能在基础的教程了.(其实是因为顺序乱了,而且那时候没有单独弄一个专栏,后面我会 ...
- FL studio 20简易入门教程 -- 第四篇 -- 钢琴卷帘窗口与单轨乐器编辑界面
钢琴卷帘窗口与单轨乐器编辑界面 本文经验主要来自于B站爱编曲网官方正版快速入门教程,链接如下: 爱编曲网官方正版快速入门教程 文章目录 钢琴卷帘窗口与单轨乐器编辑界面 前言 单轨乐器编辑界面 上方菜单 ...
最新文章
- scheduled sampling_seq2seq
- 汇总|目标检测中的数据增强、backbone、head、neck、损失函数
- Cnyunwei-Cacti+Nagios安装说明
- 将文字自动转为banner打印形式的工具
- 「后端小伙伴来学前端了」Vue中Props配合自定义方法实现组件间的通信
- flex 会使div撑满_如何讲清楚Flex弹性盒模型?(中)
- c语言多维数组基础知识,C语言基础第7章多维数组.ppt
- 优化小技巧——复杂属性对象的read模式
- Theano 更多示例
- java的基本结构_【Java基础】基本程序设计结构
- 计算机控制考试试卷及答案,计算机控制系统A考试试卷带答案.doc
- 过滤SQL关键字 防注入
- 主板声卡坏了会不会有电流声_不同领域适使用不同类型声卡,千万别选错了~~~...
- Matlab的主成分分析
- 计算机财务管理复利现值的公式,财务管理公式汇总
- OpenStack资源整理(转自陈沙克)
- 网络架构采用 bs/cs 混搭模式_最高处|SM一姐出道20年充满偶像气质天生音乐才能还有最高级的混搭_休闲...
- RetinaFace人脸检测使用
- 82055-94-5|N3-PEG-N3|Azide-PEG-Azide|叠氮PEG叠氮可修饰蛋白质
- 计算机组成原理之基本组成
热门文章
- 区块链2.0应用——以太坊
- ROS入门之使用命令行工具控制小海龟移动
- 父子mounted生命周期顺序导致的问题解决
- PLDA宣布在其XpressLINK™系列CXL控制器IP中支持CXL™ 2.0
- 浅谈Redis分布式锁的进化史
- 西藏2020年计算机二级报名时间,西藏2020年3月计算机二级考试时间安排
- Azure机器学习——创建Azure机器学习服务
- erlang xml 解析_用yecc(erlang)写一个json解析器
- “智慧工地+BIM”为建筑企业智慧化管理加码
- ubuntu安装firewalld 防火墙