【问题标题】:How count different key according its value in mongo aggregation如何根据 mongo 聚合中的值计算不同的键
【发布时间】:2017-07-30 16:50:36
【问题描述】:

我在 mongo 中有一个集合,需要创建一个带有统计信息的查询,例如按名称注册的数量和按私有键注册的数量,等等。

{
  _id : 123,
  name: capnis
  privated: true
},
{
  _id : 124,
  name: capnis
  privated: false
}, ....

当尝试在 mongo 中进行查询时不知道如何得到这个结果

{name: capnis,
 total: 2,
 totalprivatedtrue:1,
 totalprivatedfalse:1 }

这里我得到了总数,但如何得到另一个?

.aggregate([
  {$match: {name: "$name"} },
  {$group: {_id:"$name", total: {$sum:1} } }
])

【问题讨论】:

    标签: mongodb database


    【解决方案1】:

    $group 管道步骤中应用$cond 运算符,以根据privated 字段评估计数,如下所示:

    db.collection.aggregate([    
        { 
            "$group": { 
                "_id": "$name",             
                "total": {
                    "$sum":  1
                },
                "totalprivatedtrue": {
                    "$sum": {
                        "$cond": [ "$privated", 1, 0 ]
                    }
                },
                "totalprivatedfalse": {
                    "$sum": {
                        "$cond": [ { "$eq": [ "$privated", false ] }, 1, 0 ]
                    }
                }
            }  
        }
    ])
    

    【讨论】:

      猜你喜欢
      • 2021-11-26
      • 1970-01-01
      • 2013-06-10
      • 2022-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多