如何在数组元素中使用mongodb投影查询

How to use mongodb projection query in array elements

我只想在菜单中投影“type”:“A”。有办法实现吗?

    "_id" : "1",
    "menu" : [ 
        {
            "type" : "A",
            "items" : [ 
                {
                    "key" : "Add",
                    "enabled" : true,
                }            ]
        }, 
        {
            "type" : "B",
            "items" : [ 
                {
                    "key" : "Add",
                    "enabled" : true,
                }    ]
        }
    ]
}

如果你只想输出类型为 A 的菜单,你可以在查找查询中使用 $elemMatch(注意,因为这只是 return 第一个匹配的元素)

db.collection.find({},
{
  "menu": {
    "$elemMatch": {
      "type": "A"
    }
  }
})

示例here

或聚合查询中的$filter(这returns数组中具有type: "A"的所有对象):

db.collection.aggregate([
  {
    "$project": {
      "menu": {
        "$filter": {
          "input": "$menu",
          "cond": {
            "$eq": [
              "$$this.type",
              "A"
            ]
          }
        }
      }
    }
  }
])

示例here