Mongodb:计算集合中的特定对象

时间:2018-01-15 14:21:09

标签: node.js mongodb mongoose

我想计算特定对象,如果存在于集合中,如:

{
  id: 1,
  obj1: {...},
  obj2: {...}
},{
  id: 2,
  obj2: {...}
},{
  id: 3,
  obj1: {...},
  obj3: {...}
}

在上面的例子中,我需要对象计数的总和(即obj1,obj2,obj3)。并且查询应该在上面的场景中返回5.

1 个答案:

答案 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]}
          ]
        }
      }
    }
  }
])