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查询子文档多个字段 的相关文章

  • 是否可以将 mongodb 与 sqlalchemy 一起使用?

    我在中找不到任何有关连接 mongodb 的信息sqlalchemy 的文档 http docs sqlalchemy org en latest 和谷歌搜索 是否可以将 mongodb 与 sqlalchemy 一起使用 谢谢 根据 sq
  • 从 JSON 字符串创建 BSON 对象

    我有一个 Java 应用程序 它从外部应用程序获取数据 传入的 JSON 位于字符串中 我想解析该字符串并创建 BSON 对象 不幸的是 我在 Java 的 BSON 实现中找不到该 API 我是否需要使用外部解析器 例如 GSON 而且
  • 为什么我在 Nodejs 中收到“在将标头发送到客户端后无法设置标头”错误?

    我正进入 状态 Cannot set headers after they are sent to the clientNodejs 中出现错误 我无法弄清楚原因 代码如下 我正在使用 mongoose 将数据保存在 mongodb 中 我
  • 如何在 mongodb-native findAndModify 中使用变量作为字段名称?

    在使用 mongodb native 驱动程序的这段代码中 我想增加在单独变量中指定的字段的值 问题在于 在这种情况下 inc 子句中的字段名称将是 变量 而不是变量的内容 在查询部分中 所选变量按预期工作并找到正确的 ID var sel
  • mongo docker 镜像创建后未运行脚本

    我使用 docker compose 为前端 后端和 mongo 实例创建 3 个不同的容器 其中三个正在运行并在它们之间连接 但我需要在 mongo 实例运行后立即在数据库上创建一个管理员用户 根据 mongo 图像文档 每个脚本位于do
  • mongoid 中的嵌入文档与哈希数据类型

    我找不到任何讨论此问题的博客文章或文档 它们 嵌入式文档和哈希数据类型 非常相似 彼此相比有何好处或限制 考虑我的架构设计 class HistoryTracker include Mongoid Document include Mong
  • 创建永远不匹配的 mongo 表达式的最佳方法

    我正在寻找的内容在某种程度上相当于在 SQL 中执行的操作 WHERE 1 0 我正在寻找这样的东西 因为我正在构建一个类型安全的 DSL 来在我的域上执行查询 支持连接和析取 有时 添加一个从不匹配任何内容的查询可能比在代码中处理它更容易
  • 将 mongo 数组转换为具有键值对的对象

    我有一个包含字符串数组的 mongo 文档 我需要将这个特定的字符串数组转换为包含键值对的对象数组 以下是我目前的做法 id ObjectId 57e3720836e36f63695a2ef2 platform A1 available C
  • mongodb 更新所有文档,并将值增加 1 [重复]

    这个问题在这里已经有答案了 我在 mongoDB 中有几个文档 文档结构是这样的 a abc myid 2 我想用 1 更新所有文档的 myid 例如 第一个文档 myid 1 第二个文档 myid 2 依此类推 有询问吗 尝试这个查询 d
  • Mongod 服务启动退出,代码为 100

    Problem 我的 mongo 服务不再启动 root machine service mongod start root machine service mongod status mongod service High perform
  • 多文档事务在使用 mongodb 4.08 社区服务器的 C# 中不起作用

    我需要使用 mongodb 事务更新多个文档 mongodb 社区服务器版本是 4 08 net 的 mongodb 驱动程序是 2 9 beta 也尝试过 2 8 从调试中 我可以看到它执行了 session AbortTransacti
  • 如何修复 MongoClient is not a constructor 错误

    我刚刚学习 JavaScript 和 Nodejs 根据我在网上找到的一些代码 我编写了以下应用程序 当我尝试运行它时 我在第 9 行收到错误 其中显示 new MongoClient 错误提示 MongoClient 不是构造函数 您能解
  • MongoDB 存储过程等效项

    我有一个包含商店列表的大型 CSV 文件 其中一个字段是邮政编码 我有一个名为 ZipCodes 的独立 MongoDB 数据库 它存储任何给定邮政编码的纬度和经度 在 SQL Server 中 我将执行一个名为 InsertStore 的
  • MongoDB Java 嵌套文档无法使用键名中的点进行访问

    当在Java中使用MongoDB API时 我试图检索以下值two在如下所示的文档中 data id 1234 one two three 我正在运行这个 MongoCollection
  • MongoDB 如何选择候选计划

    我的应用程序中的查询速度很慢 创建两个索引后 它在本地数据库中使用它们以获得更好的性能 但是当我部署在生产数据库上时 它仍然使用原始索引 下面是我所做的 集合中的属性tasks team id project id created by a
  • 为什么 Mongohint 可以使查询运行速度提高 10 倍?

    如果我使用explain 从shell运行mongo查询 获取所使用的索引的名称 然后再次运行相同的查询 但使用hint 指定要使用的相同索引 解释计划中的 millis 字段是显着下降 例如 没有提供任何提示 gt gt db event
  • 如何确定 STARTUP2 BTree Bottom Up 步骤的总体进度?

    确定新次要成员的初始同步 STARTUP2 的索引构建阶段的总体进度的好方法是什么 在我的例子中 索引构建阶段需要很长时间 几天 如果能够看到它在这个过程中的进度 那就太好了 日志输出如下所示 Tue Jan 27 20 04 45 006
  • 尝试使用 Mongoose 进行批量更新插入。最干净的方法是什么?

    我有一个集合 其中包含包含三个字段的文档 名字 姓氏和年龄 我试图找出 Mongoose 中的哪个查询可以用来进行批量更新插入 我的应用程序偶尔会收到具有相同三个字段的新对象数组 我希望查询检查文档中是否已存在名字和姓氏 如果存在 则更新年
  • 如何同时使用 $gt 和 $lte 优化 MongoDB 查询?

    我有以下查询 有点像反向范围查找 db ip ranges find and start ip num lte 1204135028 end ip num gt 1204135028 当仅使用 lte 标识符运行时 查询会立即返回 但是当我
  • 访问 Amazon EC2 上的 Mongodb 时出现问题

    我还有一个问题要问你 我有安装了 mondodb 的 Amazon EC2 实例 它工作得很好 除了一件事 我无法从外部 我的电脑 访问 连接到 它 我认为安全组的问题 这是某种默认防火墙 有谁知道如何配置EC2实例来访问mongodb 提

随机推荐

  • 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包含一个子文档