我有这些文档:
[
{
"id": 1,
"condition": true
},
{
"id": 1,
"condition": false
},
{
"id": 2,
"condition": true
},
]
在这种情况下,我希望输出为"id": 1
,因为它具有condition
作为true
和false
("id": 2
仅具有condition
作为true
,因此它不合格)
谢谢
一个选项是将$setIsSubset
用于m
所需条件中n
的一般情况:
db.collection.aggregate([
{$group: {
_id: "$id",
conditions: {$addToSet: "$condition"}
}},
{$match: {$expr: {
$setIsSubset: [
[true, false],
"$conditions"
]
}
}},
{$project: {id: 1}}
])
看看它是如何在操场上工作的例子
您可以创建一个聚合管道,首先按id
分组,然后获得一个conditions
数组。则检查条件数组是否具有true和false并创建条件存在字段cond_true
、cond_false
如果cond_true
和cond_false
都是true
,则为匹配。
db.collection.aggregate([
{
$group: {
_id: "$id",
conditions: { $push: "$condition" }
}
},
{
$project: {
_id: 0,
id: "$_id",
cond_true: { $in: [ true, "$conditions" ] },
cond_false: { $in: [ false, "$conditions" ] }
}
},
{
$match: { cond_true: true, cond_false: true }
},
{
$project: { id: 1 }
}
])
操场