Mongodb聚合以查找同时具有布尔值的记录



我有这些文档:

[
{
"id": 1,
"condition": true
},
{
"id": 1,
"condition": false
},
{
"id": 2,
"condition": true
},
]

在这种情况下,我希望输出为"id": 1,因为它具有condition作为truefalse("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_truecond_false
如果cond_truecond_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 }
}
])

操场

相关内容

  • 没有找到相关文章

最新更新