嵌套数组上的 MongoDB $elemMatch 投影

2024-02-09

我有一个这样的集合(摘要)。

    {
    "id":"summaryid",
    "locations": [
        {
            "id": "loc1",
            "datacenters": [
                {
                    "id": "dc1.1",
                    "clusters": [
                        {
                            "id": "cl1.1",
                            "servers": [
                                {
                                    "id": "srvr1.1",
                                    "services": [
                                        {
                                            "id": "srvc1.1"
                                        }
                                    ]
                                }
                            ]
                        }
                    ]
                },
                {
                    "id": "dc1.2",
                    "clusters": [
                        {
                            "id": "cl1.2",
                            "servers": [
                                {
                                    "id": "srvr1.2",
                                    "services": [
                                        {
                                            "id": "srvc1.2"
                                        }
                                    ]
                                }
                            ]
                        }
                    ]
                }
            ]
        },
        {
            "id": "loc2",
            "datacenters": [
                {
                    "id": "dc2.1",
                    "clusters": [
                        {
                            "id": "cl2.1",
                            "servers": [
                                {
                                    "id": "srvr2.1",
                                    "services": [
                                        {
                                            "id": "srvc2.1"
                                        }
                                    ]
                                }
                            ]
                        }
                    ]
                },
                {
                    "id": "dc2.2",
                    "clusters": [
                        {
                            "id": "cl2.2",
                            "servers": [
                                {
                                    "id": "srvr2.2",
                                    "services": [
                                        {
                                            "id": "srvc2.2"
                                        }
                                    ]
                                }
                            ]
                        }
                    ]
                }

            ]
        }
    ]
}

现在我只需要 id 为 dc1.1 的数据中心的集群。我想排除集群的服务器。

我尝试使用带有 $elemMatch 和投影的查找查询,如下所示。

db.summary.find({}, {"locations": { $elemMatch: { "datacenters._id" : 
"dc1.1" } }, "locations.datacenters.clusters":0, 
"locations.datacenters.servers":0, "locations.datacentercount" : 0, 
"locations.clustercount" : 0, "locations.servercount" : 0}).pretty()

我仍然获得所有数据中心,而不是仅 1 个与 ID 匹配的数据中心。 我不确定我这样做是否正确。

谢谢你!


这是不可能的$elemMatch投影嵌套数组元素。

您可以在 3.4 服务器中尝试以下聚合。

Use $unwind几次到达嵌套数组并应用$match选择嵌套数组元素。

   db.summary.aggregate([
      {
        "$match": {
          "locations.datacenters._id": "dc1.1"
        }
      },
      {
        "$unwind": "$locations"
      },
      {
        "$unwind": "$locations.datacenters"
      },
      {
        "$match": {
          "locations.datacenters._id": "dc1.1"
        }
      },
      {
        "$project": {
          "locations.datacenters.clusters.servers": 0
        }
      }
    ])

{"$project": {"locations.datacenters.clusters.servers": 0}}将删除servers字段,同时保留最终输出中的所有其他字段。

来自文档

如果指定排除 _id 以外的字段,则不能 使用任何其他 $project 规范形式:即如果您排除 字段,您也不能指定包含字段,请重置 现有字段的值,或添加新字段。

参考:https://docs.mongodb.com/manual/reference/operator/aggregation/project/#exclude-fields https://docs.mongodb.com/manual/reference/operator/aggregation/project/#exclude-fields

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

嵌套数组上的 MongoDB $elemMatch 投影 的相关文章

随机推荐

  • 为什么我需要一个用于自动连接/注入字段的设置器?

    我有一颗豆子
  • 解决静态断言中的不完整类型

    当表达式取决于类类型本身时 有没有办法在类内部进行 static assert 也许延迟评估直到类型完成或模板实例化之后 示例代码 include
  • cURL - 构造请求以验证服务器发送的事件

    我是 cURL 和服务器发送事件的新手 我知道如何构建一个简单的GET POST使用 cURL 请求并获取响应 另外 理论上我知道服务器发送的事件是通过创建事件源侦听器来处理的 但我不确定如何继续使用 cURL 验证任何此类 API 任何指
  • 在Android中使用EditText上的TextWatcher实时计算总计和总和?

    在这里 我想采用来自我的数据库的默认值 并将 Text 设置为该值并计算净费率和总计 否则如果用户编辑费率或收取费用 我想根据该值计算净费率和总计即时的 这是我用于计算和显示值的代码 private void showItem String
  • 如何在 TFS Build 2010 中进行构建定义,可配置 w.r.t 输入变量值和“要构建的项目”

    我们使用 TFS Build 2010 进行构建 我们有两个源代码分支 假设branchA 和branchB Now as a part of the build definition we set the projects to buil
  • 如何让 jQuery 在失败时自动重试 load()?

    我正在页面上的许多地方通过 jquery load 进行一些内容替换 在我的开发服务器上一切正常 在我的实时服务器上 有时它会给我一个 请求无效 错误 我可以在 firebug 中看到该错误 我认为服务器已经不堪重负 或者某些缓存模块可能与
  • Github Actions:检查步骤状态

    我在 CI 工作中的一些步骤可能会引发错误 我不想在出现错误的每个步骤上重新启动工作流程 并希望转到检查这些步骤的最后一步并以失败的方式完成此作业 但我无法获取之前步骤的状态信息 name CI on pull request jobs m
  • 为什么圆圈在碰撞时会振动(画布)

    我一直在创建 agar io 的克隆 但我不明白为什么圆圈相互接触时会开始振动 下面是我的代码 var canvas ctx width innerWidth height innerHeight mouseX 0 mouseY 0 var
  • 您使用什么数据挖掘工具? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • TYPO3:为一个扩展设置多个存储pid

    我构建了一个扩展 它有一个 详细信息 表 其中包含包含内联到另一个对象的标题和描述的详细信息 现在新的详细信息存储在与对象相同的 pid 中 但我想更改它 这个问题 https stackoverflow com questions 151
  • 结合使用filter()和includes()来获得部分匹配

    我有一个包含我想要搜索的对象的数组 可搜索数组如下所示 value 0 label john value 1 label johnny value 2 label peter value 3 label peterson 我使用 Lodas
  • Applicative 之于 monad 就像 X 之于 comonad

    我们能解这个方程的 X 吗 Applicative 之于 monad 就像 X 之于 comonad 想了想 我觉得这其实是一个倒退的问题 有人可能会认为ComonadApply https hackage haskell org pack
  • Electron 中的自定义 HTML 对话框

    如何 或者甚至可能 在 Electron 中使用自定义 HTML 对话框 我知道 Electron 提供了某些对话框 showMessageDialog showErrorDialog 但这些似乎不允许自定义 HTML 我不想使用本机 HT
  • 时间:2019-03-17 标签:c#mvvm将视图绑定到带标题的tabcontrol

    我有一个带有主视图的 wpf 程序 Window 其中包含一个TabControl来展示几个不同的UserControl意见 子视图 每个选项卡中一个 每个视图都有一个关联的视图模型 我希望绑定TabControl这样我只需要加载一个新的s
  • 如何将所有匹配行拉入一个缓冲区?

    如何将所有匹配的行拉入缓冲区 给定一个如下文件 match 1 skip skip match 2 match 3 skip 我希望能够发出一个命令将与模式匹配的所有行 在本例中为 match 提取到单个缓冲区中 以便我可以将其放入另一个文
  • 将Class 添加到 getElementsByClassName 数组

    我需要一点帮助 因为我对 getElementsByClassName 感到沮丧 我有一个 svg 地图 其中包含带有类的路径 我现在需要列出某个类别的所有内容并添加另一个类别 现在我有 var testarray document get
  • Phonegap 2.4 Android Proguard 配置

    我已经将构建从 Phonegap Cordova 2 0 升级到 2 4 并且在开发中一切正常 直到我真正开始测试最终发布的 apk 在浪费了大量时间之后 我发现由于某种原因 现在当我运行构建时 我的 proguard 配置正在以某种方式破
  • 在Python中的嵌套字典中存储目录结构

    我正在尝试将目录结构存储在嵌套字典中 目录树 dirA dirB1 file1 txt dirB2 file2 txt templates base html report html test py 嵌套字典如下 dirs dirs dir
  • ASP.NET 启动 Web 性能分析

    我正在尝试确定 ASP NET 应用程序初始启动时间过长 恕我直言 的原因 该应用程序使用各种第三方库 以及许多我确信可以整合的参考资料 但是 我正在尝试识别 并分配责任 这些 dll 以及它们对扩展启动过程的贡献有多大 到目前为止 启动时
  • 嵌套数组上的 MongoDB $elemMatch 投影

    我有一个这样的集合 摘要 id summaryid locations id loc1 datacenters id dc1 1 clusters id cl1 1 servers