【问题标题】:MongoDB filter nested arrayMongoDB过滤器嵌套数组
【发布时间】:2020-10-11 16:03:31
【问题描述】:

我有一个看起来像这样的集合:

[
  {
    "_id": 1,
    "title": "dummy title",
    "settings": [
      {
        "type": "light",
        "status": "enabled"
      },
      {
        "type": "flare",
        "status": "disabled"
      },
      {
        "type": "toolbar",
        "status": "enabled"
      }
    ]
  }
]

我想通过 Id 获取它,但只能使用“启用”设置,并且不确定聚合管道应该是什么样子。

我应该在 Java / Kotlin 中使用 mongoTemplate 创建查询,但即使只是 mongo 查询也足够了。

【问题讨论】:

    标签: java mongodb kotlin mongotemplate


    【解决方案1】:

    您可以通过$filter 完成此操作

    db.collection.aggregate([
      {
        $project: {
          _id: 1,
          title: 1,
          settings: {
            $filter: {
              input: "$settings",
              as: "item",
              cond: {
                $eq: [
                  "$$item.status",
                  "enabled"
                ]
              }
            }
          }
        }
      }
    ])
    

    试试here

    【讨论】:

      【解决方案2】:
      //working code from MongoDB shell/CLI version 4.26(on windows 10 machine/OS)
      > db.titles.find().pretty();
      {
              "_id" : 1,
              "title" : "dummy title",
              "settings" : [
                      {
                              "type" : "light",
                              "status" : "enabled"
                      },
                      {
                              "type" : "flare",
                              "status" : "disabled"
                      },
                      {
                              "type" : "toolbar",
                              "status" : "enabled"
                      }
              ]
      }
      > db.titles.aggregate([
      ... {$unwind:"$settings"},
      ... {$match:{"settings.status":"enabled"}}
      ... ]);
      { "_id" : 1, "title" : "dummy title", "settings" : { "type" : "light", "status" : "enabled" } }
      { "_id" : 1, "title" : "dummy title", "settings" : { "type" : "toolbar", "status" : "enabled" } }
      > print("MongoDB: ",db.version());
      MongoDB:  4.2.6
      >
      

      【讨论】:

        猜你喜欢
        • 2021-02-17
        • 1970-01-01
        • 1970-01-01
        • 2018-11-22
        • 1970-01-01
        • 2017-01-28
        • 2019-07-19
        • 2022-08-19
        • 1970-01-01
        相关资源
        最近更新 更多