MongoDB(11)- 查询数组
插入测试数据
db.inventory.insertMany([
{ item: "journal", qty: 25, tags: ["blank", "red"], dim_cm: [ 14, 21 ] },
{ item: "notebook", qty: 50, tags: ["red", "blank"], dim_cm: [ 14, 21 ] },
{ item: "paper", qty: 100, tags: ["red", "blank", "plain"], dim_cm: [ 14, 21 ] },
{ item: "planner", qty: 75, tags: ["blank", "red"], dim_cm: [ 22.85, 30 ] },
{ item: "postcard", qty: 45, tags: ["blue"], dim_cm: [ 10, 15.25 ] }
]);
后面的栗子都会用到这里的测试数据
精确匹配数组
> db.inventory.find( { tags: ["red", "blank"] } )
{ "_id" : ObjectId("60b5fb209ba88b2120d5de24"), "item" : "notebook", "qty" : 50, "tags" : [ "red", "blank" ], "dim_cm" : [ 14, 21 ] }
不仅数组的值要完全一致,顺序也得保持一致
$all 操作符
如果希望找到的是包含 red、blank 两个元素的数组,可以使用 $all 操作符
> db.inventory.find({tags:{$all:["red","blank"]}})
{ "_id" : ObjectId("60b5fb209ba88b2120d5de23"), "item" : "journal", "qty" : 25, "tags" : [ "blank", "red" ], "dim_cm" : [ 14, 21 ] }
{ "_id" : ObjectId("60b5fb209ba88b2120d5de24"), "item" : "notebook", "qty" : 50, "tags" : [ "red", "blank" ], "dim_cm" : [ 14, 21 ] }
{ "_id" : ObjectId("60b5fb209ba88b2120d5de25"), "item" : "paper", "qty" : 100, "tags" : [ "red", "blank", "plain" ], "dim_cm" : [ 14, 21 ] }
{ "_id" : ObjectId("60b5fb209ba88b2120d5de26"), "item" : "planner", "qty" : 75, "tags" : [ "blank", "red" ], "dim_cm" : [ 22.85, 30 ] }
后面再展开细讲这个操作符
查询数组字段包含一个指定值元素的所有文档
> db.inventory.find( { tags: "red" } )
{ "_id" : ObjectId("60b5fb209ba88b2120d5de23"), "item" : "journal", "qty" : 25, "tags" : [ "blank", "red" ], "dim_cm" : [ 14, 21 ] }
{ "_id" : ObjectId("60b5fb209ba88b2120d5de24"), "item" : "notebook", "qty" : 50, "tags" : [ "red", "blank" ], "dim_cm" : [ 14, 21 ] }
{ "_id" : ObjectId("60b5fb209ba88b2120d5de25"), "item" : "paper", "qty" : 100, "tags" : [ "red", "blank", "plain" ], "dim_cm" : [ 14, 21 ] }
{ "_id" : ObjectId("60b5fb209ba88b2120d5de26"), "item" : "planner", "qty" : 75, "tags" : [ "blank", "red" ], "dim_cm" : [ 22.85, 30 ] }
找到 tags 字段包含 red 元素的所有文档
对数组字段中的元素指定单个条件
语法格式
{ <array field>: { <operator1>: <value1>, ... } }
{ 数组字段名 : { 操作符:值, 操作符2: 值2, ..... }}
实际栗子
查询数组 dim_cm 中至少包含一个值大于 25 的元素的所有文档
> db.inventory.find( { dim_cm: { $gt: 25 } } )
{ "_id" : ObjectId("60b5fb209ba88b2120d5de26"), "item" : "planner", "qty" : 75, "tags" : [ "blank", "red" ], "dim_cm" : [ 22.85, 30 ] }
对数组元素指定多个条件
在数组元素上指定复合条件时,可以指定查询使得单个数组元素满足这些条件或数组元素的任意组合满足条件
在数组元素上使用复合条件
> db.inventory.find( { dim_cm: { $gt: 15, $lt: 20 } } )
{ "_id" : ObjectId("60b5fb209ba88b2120d5de23"), "item" : "journal", "qty" : 25, "tags" : [ "blank", "red" ], "dim_cm" : [ 14, 21 ] }
{ "_id" : ObjectId("60b5fb209ba88b2120d5de24"), "item" : "notebook", "qty" : 50, "tags" : [ "red", "blank" ], "dim_cm" : [ 14, 21 ] }
{ "_id" : ObjectId("60b5fb209ba88b2120d5de25"), "item" : "paper", "qty" : 100, "tags" : [ "red", "blank", "plain" ], "dim_cm" : [ 14, 21 ] }
{ "_id" : ObjectId("60b5fb209ba88b2120d5de27"), "item" : "postcard", "qty" : 45, "tags" : [ "blue" ], "dim_cm" : [ 10, 15.25 ] }
dim_cm 数组包含在某种组合中满足查询条件的元素
- 满足大于 15 的条件
- 满足小于20的条件
- 同时满足这两个条件
多个条件是或的关系
查询满足多个条件的数组元素
上面的栗子虽然指定了复合条件,但只需要满足其中一个就匹配成功
如果想必须同时满足多个条件呢?
使用 $elemMatch 运算符在数组元素上指定多个条件,使得至少一个数组元素满足所有指定条件
小栗子
查询 dim_cm 数组包含至少一个大于 ($gt) 22 且小于 ($lt) 30 的元素的文档
> db.inventory.find( { dim_cm: { $elemMatch: { $gt: 22, $lt: 30 } } } )
{ "_id" : ObjectId("60b5fb209ba88b2120d5de26"), "item" : "planner", "qty" : 75, "tags" : [ "blank", "red" ], "dim_cm" : [ 22.85, 30 ] }
按数组索引位置查询元素
查询 dim_cm 数组第二个元素大于 25 的文档(索引位置从 0 开始哦)
> db.inventory.find( { "dim_cm.1": { $gt: 25 } } )
{ "_id" : ObjectId("60b5fb209ba88b2120d5de26"), "item" : "planner", "qty" : 75, "tags" : [ "blank", "red" ], "dim_cm" : [ 22.85, 30 ] }
按数组长度查询数组
查询包含长度= 3 的 tags 数组的文档
> db.inventory.find( { "tags": { $size: 3 } } )
{ "_id" : ObjectId("60b5fb209ba88b2120d5de25"), "item" : "paper", "qty" : 100, "tags" : [ "red", "blank", "plain" ], "dim_cm" : [ 14, 21 ] }
MongoDB(11)- 查询数组的更多相关文章
- MongoDB的查询操作
1. 前言 在这篇博文中,我们将学习如何查询mongoDB中的数据.当我们把数据存储在mongoDB以后,我们需要把数据查询出来.毕竟CRUD操作中,查询操作在我们系统中是我们应用比较频繁的操作.我们 ...
- mongodb的查询语句学习摘要
看了些资料,对应只需要知道怎么查询和使用mongodb的我来说,这些足够啦. 左边是mongodb查询语句,右边是sql语句.对照着用,挺方便. db.users.find() select * fr ...
- 四、MongoDB的查询
一.MongoDB的下载.安装与部署 二.MongoDB的基础知识简介 三.MongoDB的创建.更新和删除 db.blogs.insert([ { "author": " ...
- Mongodb 条件查询
1.1 查询出所有数据的指定键(name ,age ,country) db.persons.find({},{name:1,age:1,country:1,_id:0}) 2.查询条件 2.查询条件 ...
- mongodb常用查询语法
一.查询 find方法 db.collection_name.find(); 查询所有的结果: select * from users; db.users.find(); 指定返回那些列(键): se ...
- mongoDB 高级查询语法
http://www.cnblogs.com/ITAres/articles/2084794.html本文参考自官方的手册:http://www.mongodb.org/display/DOCS/Ad ...
- MongoDB 常用查询语法
一.查询 find方法 db.collection_name.find(); 查询所有的结果: select * from users; db.users.find(); 指定返回那些列(键): se ...
- MongoDB聚合查询及Python连接MongoDB操作
今日内容概要 聚合查询 Python操作MongoDB 第三方可视化视图工具 今日内容详细 聚合查询 Python操作MongoDB 数据准备 from pymongo import MongoCli ...
- TODO:MongoDB的查询更新删除总结
TODO:MongoDB的查询更新删除总结 常用查询,条件操作符查询,< .<=.>.>=.!= 对应 MongoDB的查询操作符是$lt.$lte.$gt.$gte.$ne ...
随机推荐
- 【算法学习笔记】动态规划与数据结构的结合,在树上做DP
前置芝士:Here 本文是基于 OI wiki 上的文章加以修改完成,感谢社区的转载支持和其他方面的支持 树形 DP,即在树上进行的 DP.由于树固有的递归性质,树形 DP 一般都是递归进行的. 基础 ...
- Android无障碍宝典-talkback
http://geek.csdn.net/news/detail/93269 http://geek.csdn.net/news/detail/135867
- [SQL]数据更新
插入数据 插入单个元组 一般格式: insert into <表名> [<列名1>, <列明2>, --] -- 指出在表中新插入的值的列, values(< ...
- OSI网络参考模型学习
文章目录 一.计算机与网络的发展 1.1 批处理系统 1.2 分时系统 1.3 计算机之间的通信 1.4 基于分组交换技术的计算机网络 1.5 互联网时代的计算机网络 1.6 计算机网络中协议的规定 ...
- 谈谈 Nginx 那点事【一】
为什么突然决定总结Nginx ? 不知不觉8月份又要过完了,时间真是个无情的崽种. 写Nginx 首先,主要源于最近项目部署工作中和公司技术中心的人对接部署相关事宜流程太繁琐了.每个部门有各自的工作安 ...
- 【Python机器学习实战】决策树和集成学习(二)——决策树的实现
摘要:上一节对决策树的基本原理进行了梳理,本节主要根据其原理做一个逻辑的实现,然后调用sklearn的包实现决策树分类. 这里主要是对分类树的决策进行实现,算法采用ID3,即以信息增益作为划分标准进行 ...
- NOIP 模拟 $30\; \rm 毛二琛$
题解 \(by\;zj\varphi\) 原题问的就是对于一个序列,其中有的数之间有大小关系限制,问有多少种方案. 设 \(dp_{i,j}\) 表示在前 \(i\) 个数中,第 \(i\) 个的排名 ...
- VirtualBox-虚拟硬盘扩容-win7
问题: 我在VirtualBox下搭建的win7系统只设置了一个C盘,当初只给硬盘分配32G,如今深受生活的毒打,发现只剩5G可用,装个PS都费劲. 我要扩容,扩容! 当前环境: VirtualBox ...
- flutter中显现登录页面成功后跳转的方法
最近在实现页面输入账号跟密码之后跳转到初始页面,一开始用 Navigator.of(context).push(new MaterialPageRoute(builder: () { return n ...
- 什么是.NET CLI CLR IL JIT GC,它们是如何工作的
参考网址: https://cloud.tencent.com/developer/article/1432891 1:什么是.NET? NET 是 Microsoft 的用以创建 XML Web 服 ...