MongoDB 数组类型查询 —— $elemMatch 操作符
描述
$elemMatch 数组查询操作用于查询数组值中至少有一个能完全匹配所有的查询条件的文档。语法格式如下:
{ <field>: { $elemMatch: { <query1>, <query2>, ... } } }
如果只有一个查询条件就没必要使用 $elemMatch。
限制
- 不能指定 $where 查询条件在 $elemMatch 内;
- 不能指定 $text 查询条件在 $elemMatch 内;
实例
有如下测试数据:
{ _id: 1, results: [ 82, 85, 88 ] }
{ _id: 2, results: [ 75, 88, 89 ] }
如下语句用于匹配 results 数组中含有值同时满足大于等于 80 且小于 85 的文档。
db.scores.find({ results: { $elemMatch: { $gte: 80, $lt: 85 } } }
)
如下查询结果,文档中 results 中 82 满足大于等于 80 且小于85。
{ "_id" : 1, "results" : [ 82, 85, 88 ] }
数组嵌套文档
例如有如下测试数据:
{ _id: 1, results: [ { product: "abc", score: 10 }, { product: "xyz", score: 5 } ] }
{ _id: 2, results: [ { product: "abc", score: 8 }, { product: "xyz", score: 7 } ] }
{ _id: 3, results: [ { product: "abc", score: 7 }, { product: "xyz", score: 8 } ] }
如下语句用于匹配 results 数组中含有值同时满足product 为 “xyz” 且 score 大于等于8 的文档。
db.survey.find({ results: { $elemMatch: { product: "xyz", score: { $gte: 8 } } } }
)
查询结果如下:
{ _id: 3, results: [ { product: "abc", score: 7 }, { product: "xyz", score: 8 } ] }
单查询条件
如果只有单个查询条件时没有必要使用 $elemMatch 操作符。例如如下查询:
// 没有必要使用 $elemMatch 操作符
db.survey.find({ results: { $elemMatch: { product: "xyz" } } }
)
$elemMatch 操作符只有单个查询条件,完全可以使用如下写法代替:
db.survey.find({ "results.product": "xyz" }
)
官网文档: https://docs.mongodb.com/manual/reference/operator/query/elemMatch/index.html
作者:学习园
来自个人博客: https://xuexiyuan.cn/article/detail/227.html
MongoDB 数组类型查询 —— $elemMatch 操作符相关推荐
- php mongodb 子查询,MongoDB数组子查询elemMatch
MongoDB数组子查询elemMatch 在 MongoDB数组子查询elemMatch详解 语法 db_name.collection_name.find({field:{$elemMatch:{ ...
- MongoDB数组查询
文章目录 MongoDB数组查询 数组匹配 查询数组元素 多条件数组元素查询 1. 复合过滤条件查询数组元素 2. 查询满足多个条件的数组元素 3. 按数组索引位置查询元素 4. 按数组长度查询数组 ...
- js基础(数组)--数组类型、类数组对象、作为数组的字符串
1.数组类型 我们到处都可以看见数组是具有特殊行为的对象.给定一个未知的对象,判定它是否为数组通常非常 有用.在ECMAScript 5中,可以使用Array.isArray()函数来做这件事情:Ar ...
- PostgreSQL 数组类型
PostgreSQL 支持表的字段使用定长或可变长度的一维或多维数组,数组的类型可以是任何数据库内建的类型.用户自定义的类型.枚举类型, 以及组合类型.但目前还不支持 domain 类型. 数组类型的 ...
- C++实现:自定义数组类型实现相关运算符重载
运算符重载说明 这次我们通过来自定义数组类型重载[].<<.>>.==.!=运算符来学习C++运算符重载相关知识. C++的运算符重载是C++相对于其他编程语言的一大特色. 在 ...
- Python数组类型——列表(list)
Python数组类型--列表(list) 列表是最常用的Python数据类型,可以作为一个方括号内的逗号分隔值出现. 列表的数据项不需要具有相同的类型,列表索引从0开始. 创建一个列表,只要把逗号分隔 ...
- mongodb关联表查询
1.首先自定义一个查询的Operation package com.pica.wx.bean;import com.mongodb.DBObject; import org.springframewo ...
- postgre 数组类型
前言 最近在学习postgreSQL,发现 postgre 支持数组类型,闲着无聊整理了一些数组类型的用法.目前处于探索阶段. 1 创建表 CREATE TABLE test ( ID serial ...
- Postgresql杂谈 06—Postgresql中的范围和数组类型
本文主要介绍下Postgresql的另外两种特殊的类型Range类型(范围类型)和数组类型.两种类型,适用于不同的场景,但是最终的目的相同,就是使用传统的数据类型,建立常规的索引无法满足查询的性能要求 ...
最新文章
- PLSQL Developer概念学习系列之如何正确登录连接上Oracle(图文详解)
- 混淆工具Dotfuscator基本使用
- rapidJson输出时 保留小数位
- 解决卸载时残留目标文件夹的问题
- qt开发环境 - c++之输入,输出,名字空间定义,名字空间指令,名字空间声明
- LeetCode之Add Digits
- css绘制正方体_设计师仅使用CSS绘制了8个标志性X战警
- mysql filck_顺序全局id生成方案-flickr(转载)
- php自动跳转函数,迅睿CMS 重写控制网站自动跳转函数
- CCNA 中文教材 (pdf)
- mysql 数据恢复 binlog
- 虚拟机ubuntu的联网方法(NET)
- CTR预估 论文精读(十七)--ESMM: Entire Space Multi-Task Model
- 设计一个分数类java_Java 有理数类 分数类 Rational类的设计与实现
- 让QQ的文字漂亮起来
- 如何实现上传多个图片并依次展示_如何在一张ppt中插入多张图片并能依次播放...
- 【轮播图】使用bootstrap轮播插件(Carousel)
- Sigmastar 方案的相机开发流程和注意点
- oneDrive 无法连接
- 判断用户是否使用手机登录
热门文章
- php 与 python对接_关于PHP调用Python的实施以及配置
- 整数因子分解c语言递归,整数因子分解:计算一个整数所有的分解式(递归实现)...
- php ip 省份,PHP有没有生成国内各省份IP地址的类库?
- mysql mycat 路由规则_Mycat分库路由规则
- python夹角余弦雷达图_雷达导论PART-II.1 无线电波与交变电流信号
- 学习笔记-AngularJs(十)
- sessionStorage和localStorage的用法,不同点和相同点
- js 动态绑定事件 on click 完美解决绑定不成功
- 激发你的灵感:16个精美视差效果网页设计作品
- CSS布局(五) 网页布局方式