MongoDB组并查找值不存在的结果';特奥库尔

MongoDB组并查找值不存在的结果';特奥库尔,mongodb,Mongodb,我的数据库中有以下文档: { id: ObjectId(...), value1: 0, value2: false }, { id: ObjectId(...), value1: 0, value2: true }, { id: ObjectId(...), value1: 1, value2: false }, { id: ObjectId(...), value1: 1, value2: fal

我的数据库中有以下文档:

{
    id: ObjectId(...),
    value1: 0,
    value2: false
}, {
    id: ObjectId(...),
    value1: 0,
    value2: true
}, {
    id: ObjectId(...),
    value1: 1,
    value2: false
}, {
    id: ObjectId(...),
    value1: 1,
    value2: false
}, {
    id: ObjectId(...),
    value1: 1,
    value2: false
}
我想按value1对所有对象进行分组,并找到那些没有value2=true的对象

db.getCollection('collection').aggregate([
    {$group: {_id: {'value1': '$value1', 'value2' : '$value2'}, count: {$sum:1}}},
    {$match: {'_id.value2': true, count: {$eq: 0}}}
])
请参见值为1=0的对象。 您可以看到存在一个value2=true的文档

db.getCollection('collection').aggregate([
    {$group: {_id: {'value1': '$value1', 'value2' : '$value2'}, count: {$sum:1}}},
    {$match: {'_id.value2': true, count: {$eq: 0}}}
])
对于value1=1,不存在value2=true的文档。
我想要所有这些值1,而我没有值2=true

db.getCollection('collection').aggregate([
    {$group: {_id: {'value1': '$value1', 'value2' : '$value2'}, count: {$sum:1}}},
    {$match: {'_id.value2': true, count: {$eq: 0}}}
])
我试过了,但什么也找不到。
因为我过滤掉了真实值。所以没有什么可计算的

我希望你能理解我,能帮助我


编辑1-我想要的结果:
我想得到这样的东西:

{
    value1: 0,
    count: 1   // value1=0 has exactly 1 document with value2=true
}, {
    value1: 1, // <-- Im just interested in this values which has the count of 0
    count: 0   // <-- value1=1 has NO documents with value2=true
}
{
值1:0,
计数:1//value1=0正好有一个value2=true的文档
}, {

值1:1,//您可以在聚合下面尝试。这将保留
values2
至少有一个真值或所有
values2
为假的所有组

db.collection.aggregate([{
    $group: {
        _id: "$value1",
        values2: {
            $push: "$value2"
        }
    }
}, {
    $redact: {
        $cond: {
            if: {
                $or: [{
                    $anyElementTrue: ["$values2"]
                }, {
                    $setEquals: ["$values2", [false]]
                }]
            },
            then: "$$KEEP",
            else: "$$PRUNE"
        }
    }
}])

不确定您想说什么,但如果您发布了所需的结果,向您建议解决方案会更容易。对于具有多个特定
value2=true
条目的
value1
?您也希望这样吗?它们也可以是结果的一部分,但我需要的是它们没有值2=true文档已更改
if
if:
if:{$setEquals:[“$values2”,[false]]}
现在我只得到所有值都为false的值。这是一个很好的解决方案。我以前不知道这个命令
redact
。谢谢你太棒了,这是我的想法,但我并不完全确定要取消它。