объект с несколькими аккумуляторами в monodb - PullRequest
1 голос
/ 20 марта 2019

Я новичок в dong Монго, и я пишу запрос для выборки трех лучших клиентов на основе продолжительности их звонков из моей коллекции, приведенной ниже. Мой запрос

db.getCollection("dailylogs20190314").aggregate([
  {
    $match: { company_name: { $in: ["TCS PVT LTD - FIXED LINE", "TCS -SON"] } }
  },
  {
    $group: {
      _id: "$customer_msisdn",
      max_duration: { $sum: { $toInt: "$duration" } }
    }
  },
  { $sort: { max_duration: -1 } },
  { $limit: 3 }
]);

этот запрос дает мне следующий результат

_id            max_duration
-------------- ------------
924230000000  | 11988005
922136172600  | 1185000
922136182353  | 3381

Но я хочу также указать название компании для каждой строки, как мне добиться того, чего я хочу, это

_id            max_duration   company_name
-------------- ----------------------------
924230000000  | 11988005  |   TCS -SON
922136172600  | 1185000   |   TCS -Fixed Line
922136182353  | 3381      |   TCS -Fixed Line

Thankx

1 Ответ

1 голос
/ 20 марта 2019

Вам необходимо использовать аккумулятор $first для возврата первого документа после применения этапа $group.

db.getCollection("dailylogs20190314").aggregate([
  { "$match": {
    "company_name": { "$in": ["TCS PVT LTD - FIXED LINE", "TCS -SON"] }
  }},
  { "$group": {
    "_id": "$customer_msisdn",
    "max_duration": { "$sum": { "$toInt": "$duration" } },
    "company_name": { "$first": "$company_name" }
  }},
  { "$sort": { "max_duration": -1 } },
  { "$limit": 3 }
])
...