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
。谢谢你太棒了,这是我的想法,但我并不完全确定要取消它。