在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})
将返回
答案 0 :(得分:1)
您可以执行aggregate
至:
$unwind
您的数组$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是演示