MongoDB组聚集,条件为$ sum

Abt*_*med 5 javascript mongoose mongodb mongodb-query aggregation-framework

我的数据库集合如下所示

[{ 
   _id:1,
   status:"active",
   sale: 4,
   createdAt:"2019-10-08 08:46:19"
},
{
   _id:2,
   status:"inactive",
   sale:5,
   createdAt:"2019-10-08 06:41:19"
},
{
   _id:2,
   status:"inactive",
   sale:5,
   createdAt:"2019-10-08 02:01:19"
}]
Run Code Online (Sandbox Code Playgroud)

我需要按“天”分组。我想要的结果

[{
  createdAt:"2019-10-08 02:01:19",
  inactive: 2,
  active:1,
  salesOfActive: 4,
  salesOfInactive:10
}]
Run Code Online (Sandbox Code Playgroud)

我没有得到希望得到任何帮助的实际结果,我们将不胜感激

我已经尝试过此方法,但不知道如何每天获得salesOfActivesalesOfInactive

{
        $group: {
          _id: {
            day: { $dayOfMonth: "$createdAt" }
          },
          inActive:{$sum: { status:"inactive"}},
          active:{$sum: { status:"active"}},
          salesOfActive: { $sum:$sale  }
        }
}
Run Code Online (Sandbox Code Playgroud)

Ash*_*shh 4

基本上你需要这里的$sum每个字段$cond

db.collection.aggregate([
  { "$group": {
    "_id": {
      "$dayOfMonth": { "$dateFromString": { "dateString": "$createdAt" } }
    },
    "inactive": {
      "$sum": { "$cond": [{ "$eq": ["$status", "inactive"] }, 1, 0] }
    },
    "active": {
      "$sum": { "$cond": [{ "$eq": ["$status", "inactive"] }, 0, 1] }
    },
    "salesOfInactive": {
      "$sum": { "$cond": [{ "$eq": ["$status", "inactive"] }, "$sale", 0] }
    },
    "salesOfActive": {
      "$sum": { "$cond": [{ "$eq": ["$status", "inactive"] }, 0, "$sale"] }
    }
  }}
])
Run Code Online (Sandbox Code Playgroud)

蒙戈游乐场