【问题标题】:MongoDB group by count based on conditionMongoDB 根据条件按计数分组
【发布时间】: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,谢谢,它的工作

标签: mongodb mongoose nosql mongodb-query nosql-aggregation


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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-24
    • 2021-02-03
    • 1970-01-01
    • 2017-09-13
    • 2015-07-22
    • 2021-02-21
    • 2017-10-15
    相关资源
    最近更新 更多