Монго многократного подсчета и делят результат - PullRequest
0 голосов
/ 20 октября 2018

У меня есть коллекция mongodb следующим образом:

[

  {
      "_id" : ObjectId("5ba0e5a99e7537012371855a"),
      "user_id" : 2,
      "action" : 0,
      "source" : 1,
      "service" : "FootPlus",
      "free" : false,
      "source_detail" : {
          "source_type" : "landing",
          "source_id" : 2,
          "promoter_id" : 1
      },
      "created_at" : ISODate("2018-09-18T11:46:49.000Z")
  }

  {
      "_id" : ObjectId("5ba0e5cc9e7537013d57e37a"),
      "user_id" : 2,
      "action" : 1,
      "service" : "FootPlus",
      "source" : 0,
      "created_at" : ISODate("2018-09-18T11:47:24.000Z"),
      "source_detail" : {
          "source_type" : "landing",
          "source_id" : 2,
          "promoter_id" : 1
      }
  }
]

Я хочу сгруппировать по source_detail.promoter_id и считать action = 0 и action = 1, а также разделить счет action = 0 на счет action =1 на промоутера, поэтому мой результат должен быть:

[
    {
        "promoter_id": 2
        "action_0": 27,
        "action_1": 9,
        "devide": 3
    },
    {
        "promoter_id": 3
        "action_0": 18,
        "action_1": 3,
        "devide": 6
    }
]

как мне достичь этого результата?спасибо.

1 Ответ

0 голосов
/ 20 октября 2018

Вы можете использовать ниже агрегации.

Что-то вроде

db.colname.aggregate([
 {"$group":{
  "_id":"$source_detail.promoter_id",
  "action_0":{"$sum":{"$cond":[{"$eq":["$action",0]},1,0]}},
  "action_1":{"$sum":{"$cond":[{"$eq":["$action",1]},1,0]}}
 }},
 {"$addFields":{"divide":{"$divide":["$action_0","$action_1"]}}}
])
...