我想计算特定对象,如果存在于集合中,如:
{
id: 1,
obj1: {...},
obj2: {...}
},{
id: 2,
obj2: {...}
},{
id: 3,
obj1: {...},
obj3: {...}
}
在上面的例子中,我需要对象计数的总和(即obj1,obj2,obj3)。并且查询应该在上面的场景中返回5.
答案 0 :(得分:1)
您可以尝试以下$group
聚合。
$cond
表达式的 $ifNull
来检查字段是否存在,当缺席时输出1为0时出现。
内部$sum
计算每个文档中带有外部$sum
的值,以便对集合中的值求和。
db.col.aggregate([
{
"$group":{
"_id":null,
"count":{
"$sum":{
"$sum":[
{"$cond":[{"$ifNull":["$obj1",false]},1,0]},
{"$cond":[{"$ifNull":["$obj2",false]},1,0]},
{"$cond":[{"$ifNull":["$obj3",false]},1,0]}
]
}
}
}
}
])