如何在mongo中查询数组元素,以便所有嵌套项都通过给定条件?

时间:2016-07-21 01:08:02

标签: mongodb mongodb-query

在Mongo中我有这样的数据结构:

db.elements

{
  id: 1,
  arr: [
    {status: true},
    {status: false}
  ]
},

{
  id: 2,
  arr: [
    {status: true},
    {status: true}
  ]
}

我需要找到arr中所有元素的status == true的项目。 我希望看到id为== 2的项目。

BUT

db.elements.find({'arr.status': true})

将返回

1 个答案:

答案 0 :(得分:1)

您可以执行aggregate至:

  • $unwind您的数组
  • {li> $group $_id$arr.status
  • $group $_id并构建一个包含status所有不同值的数组(因此它会给你[true,false]或[true]或[假])
  • $match所有具有前一个数组大小的记录== 1&&第一个元素是true

mongo查询是:

db.elements.aggregate([{
    "$unwind": "$arr"
}, {
    "$group": {
        "_id": {
            id: "$id",
            value: "$arr.status"
        }
    }
}, {
    "$group": {
        "_id": "$_id.id",
        value: {
            $addToSet: '$_id.value'
        }
    }
}, {
    "$match": {
        "value": {
            "$size": 1,
        },
        "value.0": true
    }
}]);

Here是演示