【问题标题】:Mongodb: Count specific objects in collectionsMongodb:计算集合中的特定对象
【发布时间】:2018-01-16 07:25:47
【问题描述】:

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

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

在上面的示例中,我需要对象计数的总和(即 obj1、obj2、obj3)。在上述情况下查询应该返回 5。

【问题讨论】:

  • 这些总是被命名为 obj1, obj2, obj3?三个?
  • 是的,名字总是一样的

标签: node.js mongodb mongoose


【解决方案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]}
          ]
        }
      }
    }
  }
])

【讨论】:

  • 我已经用 add 替换了内部总和,它可以根据需要工作,谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多