Mongo查询子文档多个字段

2024-03-02

假设我有一个这样的集合:

{ "arr" : [ { "name" : "a", "num" : 1 }, { "name" : "a", "num" : 2 } ] },
{ "arr" : [ { "name" : "b", "num" : 1 }, { "name" : "a", "num" : 2 } ] },
{ "arr" : [ { "name" : "b", "num" : 1 }, { "name" : "b", "num" : 2 } ] }

我想找到所有文件arr包含一个子文档name=“b”和num = 2.

如果我执行这样的查询:

db.collection.find({
    $and: [
        { "arr.name": "b" },
        { "arr.num": 2 }
    ]
});

它将返回集合中的所有文档,因为它们每个都包含一个子文档,其中name“b”或“a”的num of 2.

我也尝试过这个:

db.collection.find({
    arr: [
        { "name": "b", "num": 2 }
    ]
});

它不会引发任何错误,但不会返回任何结果。

如何查询MongoDB中的多个子文档字段?


这实际上就是$elemMatch http://docs.mongodb.org/manual/reference/operator/query/elemMatch/运算符是 for,尽管它经常被误用。它本质上是对数组“内”的每个元素执行查询条件。除非明确调用,否则所有 MongoDB 参数都是“与”运算:

db.collection.find({ "arr": { "$elemMatch": { "name": "b", "num": 2  } } })

如果您只期望匹配的字段而不是匹配的字段,那么您可能也想在这里“投影” 整个文件:

db.collection.find(
    { "arr": { "$elemMatch": { "name": "b", "num": 2  } } },
    { "arr.$": 1 }
)

最后解释一下为什么你的第二次尝试不起作用,这个查询:

db.collection.find({
    "arr": [
        { "name": "b", "num": 2 }
    ]
})

不匹配任何内容,因为没有实际文档,其中“arr”包含与您的条件完全匹配的单个元素。

你的第一个例子失败了..:

db.collection.find({
    $and: [
        { "arr.name": "b" },
        { "arr.num": 2 }
    ]
});

因为满足条件的数组元素有多个,这并不仅仅认为两个条件都适用于同一个元素。就是这样$elemMatch添加,当您需要多个条件来匹配时,这就是您使用它的地方。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mongo查询子文档多个字段 的相关文章

  • 抛出新的 mongoose.Error.MissingSchemaError(name); ^ MongooseError:尚未为模型“商人”注册架构

    throw new mongoose Error MissingSchemaError name MongooseError 尚未为模型 商人 注册架构 使用 mongoose model 名称 模式 在 Mongoose model C
  • Morphia - 未在 dbObj 中找到定义的类

    我有一个相当有趣的问题 当尝试从 Mongo 实例加载模型时 Morphia 会抛出以下错误 22 17 13 WARN Class not found defined in dbObj java lang ClassNotFoundExc
  • 如何在 mongodb 查询中过滤数组

    在 mongodb 中 我有一个包含单个文档的集合 如下所示 id ObjectId 5552b7fd9e8c7572e36e39df StackSummaries StackId arn aws cloudformation ap sou
  • 正则表达式 Spring 数据 mongodb 存储库

    早上好 我正在尝试使用查询注释将正则表达式与 Spring data mongodb 存储库结合起来 我想要的是在我的 mongo 文档的一个字符串属性中搜索一个子字符串 我一直在谷歌和这里寻找 但我没有找到任何优雅的东西 我想知道 Spr
  • Spring Mongo Populator 一一

    我在 Kotlin 上使用 MongoDB 和 Spring 并且希望我的应用程序在启动时填充 MongoDB 集合 并在每次启动时清理 我的问题是 如果我填充的某些数据有问题 如何才能一一填充数据以便容错 my code Configur
  • Mongoose 多个连接

    目前我的连接有这个代码猫鼬 js var mongoose require mongoose var uriUtil require mongodb uri var mongodbUri mongodb localhost db name
  • MongoDB - 编辑器变量 - MongoDB shell - Windows 7

    EDITOR 变量功能真的可以在 Windows 7 上使用吗 我正在读一篇文章 说一旦我们设置了 EDITOR 变量在 mongorc js 中 我们只需在 shell 中输入 编辑变量名 and var name将被加载到编辑器中 在我
  • 使用mongodb聚合框架按数组长度分组

    我有一个看起来像这样的集合 id id0 name saved things id id1 name saved things id id2 name saved things etc 我想使用 mongodb 的聚合框架来得出一个直方图结
  • 在 MongoDB 中查找 7 天前的记录

    我有一个包含对象的集合 如下所示 1 id ObjectId 551c6605e4c6ac495c923aab sender id ObjectId 551c6605e4c6ac495c923aac rep sender id 38 sen
  • 如何决定使用哪种NoSQL技术? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 MongoDB 基于文档 HBase 基于列 和 Neo4j 对象图 的优缺点是什么 我特别有兴趣了解
  • Mongoose 查询:删除“_id”属性,在结果中保留虚拟属性“id”

    我正在运行 Express js 应用程序 并且有以下设置 模型 js var schemaOptions toJSON virtuals true toObject virtuals true var modelSchema new mo
  • MongoDB $geoIntersects 不适用于包含负顶点的多边形

    我已在数据库中存储了跨越 x 轴和 y 轴的多边形 并且我想搜索包含给定点的多边形 为此 我使用 geoIntersects 运算符来指定一个点 但是 当多边形穿过轴时 MongoDB 不会返回任何多边形 我可以对查询或架构进行任何小的更改
  • Mongodb 聚合嵌套组以及最近更新的文档

    我已经在我的集合中指定了人员 状态 如下所示 ASSIGN ID 583f84bce58725f76b322398 SPEC ID 58411771 STATUS 1 UPDATE DATE ISODate 2016 12 21T04 10
  • 无法连接到服务器 127.0.0.1:27017 连接尝试失败 MongoDB

    我正在使用 Ubuntu 操作系统 16 04 我正在使用命令启动 mongodb sudo service mongod start进而mongo 它为我生成了这个错误 MongoDB shell version v4 0 1 conne
  • MongoDB,从数组中删除对象

    Doc id 5150a1199fac0e6910000002 name some name items id 23 name item name 23 id 24 name item name 24 有没有办法从数组中提取特定对象 IE
  • Mongodb 聚合数组中的子文档

    我正在使用 mongodb 作为后端实现一个小型应用程序 在此应用程序中 我有一个数据结构 其中文档将包含一个包含子文档数组的字段 我使用以下用例作为基础 http docs mongodb org manual use cases inv
  • Mongodump之后,调用MongoRestore挂起

    我们正在尝试在相对较小的数据库上做一个简单的 MongoDump 我们的步骤很简单 export 从目标机器上删除现有数据库 在目标机器上导入 MongoDump 完美执行 mongodump out root mongo prod DB
  • Mongodb - 为现有集合添加架构

    我的 MongoDB 中有一个包含 1300 万条记录的集合 不幸的是 当我创建这个集合时 没有为其创建模式 我想知道除了备份整个数据库 创建架构并上传所有数据之外 是否有任何方法可以添加 JSON 架构 您可以使用以下方法将 JSON 架
  • MongoDB:检查值是否为空或数组是否为空

    我想匹配所有不包含 公司 属性或 公司 值为空或空数组的文档 User find Company in null function err users if err throw err console log users length th
  • 是否可以提高 Mongoexport 速度?

    我有一个 1 3 亿行的 MongoDB 3 6 2 0 集合 它有几个简单的字段和 2 个带有嵌套 JSON 文档的字段 数据以压缩格式 zlib 存储 我需要尽快将其中一个嵌入字段导出为 JSON 格式 然而 mongoexport 需

随机推荐

  • Python:未检测到已安装的 selenium 包

    我正在使用Anaconda http continuum io downloadspython 发行版并想使用selenium http selenium googlecode com svn trunk docs api py index
  • 如何在Python中获取线程id?

    我有一个多线程Python程序和一个实用函数 writeLog message 写出时间戳 后跟消息 不幸的是 生成的日志文件没有给出哪个线程正在生成哪个消息的指示 我想writeLog 能够在消息中添加一些内容来识别哪个线程正在调用它 显
  • 如何在 RSAParameters 上设置用于 RSACryptoServiceProvider 的公钥和私钥?

    我在网上阅读了一些教程 并生成了公钥和私钥 但是如何将它们设置为在 C 中使用 这是我所拥有的 string publicKey string privateKey UnicodeEncoding ByteConverter new Uni
  • 从 BitmapSource 中删除 Alpha

    我使用 BitBlt 和 CreateBitmapSourceFromHBitmap 将窗口捕获为 BitmapSource 可以将其显示在 WPF 应用程序中的 Image 元素上 但由于某种原因 它捕获的大部分应用程序都是透明的 这是正
  • htaccess RewriteRule *.php 到 /*/

    我只是找不到满足我需要的正确解决方案 所以我希望有人能够在这里帮助我 我现在有包含此文件的网站 admin images js about php index php news php questions php 所以我现在的网址是 www
  • Route 53 资源记录集的多个 IP 地址

    我正在研究aws route53 当我创建资源记录集时 我可以将多个IP地址添加到记录集的值中 这里多个IP地址的目的是什么 例如 我的域将路由到服务器 1 和服务器 2 我尝试停止服务器 1 并访问我的域 但它没有路由到服务器 2 这里有
  • MySQL:对空值进行平均

    有没有一种简单的方法可以排除空值对平均值的影响 它们似乎算作 0 这不是我想要的 我只是不想考虑它们的平均值 但问题是 我不能将它们从结果集中删除 因为该记录包含我确实需要的数据 Update example select avg col1
  • 默认参数位于参数列表中间?

    我在我们的代码中看到一个函数声明 如下所示 void error char const msg bool showKind true bool exit 我首先认为这是一个错误 因为函数中间不能有默认参数 但编译器接受了这个声明 有没有人见
  • 如何使用动态语言进行不同的编程?

    真正知道如何利用动态编程语言的人与使用静态语言的人相比 如何以不同的方式进行编程 我熟悉关于静态类型与动态类型的整个争论 但这不是我要表达的内容 我想讨论在动态语言中实用但在静态语言中不实用的问题解决技术 我见过的大多数用动态编程语言编写的
  • Maven2中如何使用maven-simian-plugin?

    我正在寻找 Maven2 报告插件Simian http www redhillconsulting com au products simian 我发现的最接近此类报告的是this http repo1 maven org maven2
  • Rails 服务器 bin/rails:6: 警告: 已初始化常量 APP_PATH 错误

    我尝试了很多方法 例如卸载 重新安装 Rails 和 Gems 但无济于事 当我进入新项目并运行rails s或bundle execrails server时 我收到此错误 bin rails 6 warning already init
  • Excel 图表同时将所有数据标签从值更改为系列名称

    我在尝试更改标签时在 Excel 堆积柱形图中遇到此问题 我的图表有多个列 每列中有数百个堆叠值 系列 通过选择图表 然后从布局 gt 数据标签 gt 更多数据标签选项 gt 标签选项 gt 标签包含 gt 选择 系列名称 我只能用一个系列
  • 带有活动脚手架的三柱连接导轨

    我有一个包含三列的连接表 我尝试使用 a has much through 和 habtm 来定义这三个模型 我使用主动脚手架只是为了 CRUD 功能 然后它将被逐步淘汰 我有一种感觉 如果我想要一个三列连接表 我将不得不尽早淘汰活动脚手架
  • 尝试修改 PostgreSQL 中的约束

    我检查了Oracle提供的文档 找到了一种在不删除表的情况下修改约束的方法 问题是 它在修改时出错 因为它无法识别关键字 使用 PostgreSQL 的 EMS SQL 管理器 Alter table public public insur
  • 将我的服务器上的端口 80 转发到 8080 阻止端口 8080 的用户是否能够访问我的网站? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我有一个 Web 应用程序在 tomcat 的 8080 端口上运行 该应用程序需要能够从非常严格的防火墙后面访问 将端口 80 转发到 8080 是
  • 有没有办法让 Nimbus Look&Feel 为顶级 JFrame 渲染自己的窗口装饰?

    有没有办法让 Nimbus Look Feel 渲染自己的顶级窗口装饰JFrame 我一直在互联网上挖掘 我开始怀疑这可能根本不可能 有没有人真正成功 并关心 这一点 Nimbus 装饰漂亮又整洁内部框架 but 显然没有办法达到同样的效果
  • GeoChart Google 可视化未在 ASP.NET 中显示某些国家/地区

    有一个错误对我来说很难解决 但我设法将其范围缩小到可以重现的简单步骤 1 前往https developers google com chart interactive docs gallery geochart https develop
  • 是否可以从 TabBarView 内容区域滑动到相邻的 PageView 页面?

    我想将选项卡放置在水平 PageView 内 并且能够滑出选项卡 在内容区域中 我可以从一个页面滑入选项卡 但不能从选项卡滑出到另一个页面 如果我在 TabBar 上滑动 那么我可以离开选项卡并转到相邻页面 有没有办法让我从 TabView
  • 如何在 Java 中递归地从 N 元素集中生成所有 k 元素子集

    所以我陷入了试图从给定的 N 元素集中找到所有 k 元素子集的问题 我知道使用公式 C n k C n 1 k 1 C n 1 k 的 k 子集总数是多少 我也知道如何做到这一点以迭代的方式 但是当我尝试思考递归解决方案时 我陷入了困境 谁
  • Mongo查询子文档多个字段

    假设我有一个这样的集合 arr name a num 1 name a num 2 arr name b num 1 name a num 2 arr name b num 1 name b num 2 我想找到所有文件arr包含一个子文档