MongoDB 根据条件按计数分组

Posted

技术标签:

【中文标题】MongoDB 根据条件按计数分组【英文标题】:MongoDB group by count based on condition 【发布时间】:2019-02-11 13:55:33 【问题描述】:

我有以下 mongo DB 架构:

 
    "_id" : "5b76c3c037548390fdb5b40e",
    "userId" : "4601",
    "modified" : ISODate("2018-08-21T19:13:43.301+05:30"),
    "rStatus" : "started",
,

    "_id" : "5b76c3c037548390fdb5b40e",
    "userId" : "13",
    "modified" : ISODate("2018-08-21T19:13:43.301+05:30"),
    "rStatus" : "completed",
,
........

需要通过rStatus字段的修改日期和计数来获取数据组,例如


    modified:"2018-08-21",
    count :"completed":1,"ongoing":4
,

    modified:"2018-07-23",
    count :"completed":2,"ongoing":5
,

我正在使用 $group,但它仅按修改日期计算,而不是按内部键的值。

【问题讨论】:

这可能是答案db.collection.aggregate([ "$group": "_id": "$dateToString": "date": "$modified", "format": "%Y-%m-%d" , "completed": "$sum": "$cond": [ "$eq": [ "$rStatus", "completed" ] , 1, 0 ] ]) @AnthonyWinzlet,谢谢,它的工作 【参考方案1】:

您可以在 3.6 中使用以下聚合。

db.colname.aggregate([
"$group":
  "_id":
    "date":"$dateToString":"date":"$modified","format":"%Y-%m-%d",
    "rstatus":"$rStatus"
  ,
  "count":"$sum":1
,
"$group":
  "_id":"$_id.date",
  "count":"$mergeObjects":"$arrayToObject":[[["$_id.rstatus","$count"]]]
])

【讨论】:

以上是关于MongoDB 根据条件按计数分组的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB聚合使用表达式运算符(函数)分组按条件计数统计案例一则

MongoDB聚合使用表达式运算符(函数)分组按条件计数统计案例一则

在同一个mongodb查询中选择按计数和不同计数分组

MongoDB计数按数组元素分组的数组中的匹配字符串

具有特定条件计数的 Mongodb 聚合并按输出投影的日期范围过滤不能按预期工作

MongoDB 轻松搞定统计 —— 聚合函数使用