#mongodb #aggregation-framework
#mongodb #агрегация-фреймворк
Вопрос:
Я пытаюсь получить количество потенциальных клиентов, которые соответствуют идентификатору списка, и объединить его с их стоимостью. Вот моя коллекция:
[
{
"list_id": "5f76a53e8a93be772c14cc06",
"fname": "John",
"lname": "Doe",
"cost": 0
},
{
"list_id": "5f76a53e8a93be772c14cc06",
"fname": "John",
"lname": "Wayne",
"cost": 0.65
},
{
"list_id": "5f76a53e8a93be772c14cc06",
"fname": "John",
"lname": "Kelly",
"cost": 1
},
{
"list_id": "5f76a53e8a93be772c14cc06",
"fname": "John",
"lname": "Morrie",
"cost": 0.40
}
]
Я пытаюсь получить этот результат:
[
{
"_id": null,
"lead_count": 4
"total_cost": 2.05
}
]
Моя агрегация выглядит так:
db.collection.aggregate([
{
"$match": {
list_id: "5f76a53e8a93be772c14cc06"
}
},
{
"$group": {
_id: null,
total_cost: {
$sum: "$cost"
}
}
}
])
Но это только дает мне:
[
{
"_id": null,
"total_cost": 2.05
}
]
Как мне нужно настроить его, чтобы он показывал то, что я хочу? Вот ссылка на игровую площадку: https://mongoplayground.net/p/zvLY67Oa_Ps
Ответ №1:
Вам нужно указать новое поле, которое вы хотите добавить, т.е. lead_count
.
Необходим только еще один объект: "lead_count": { "$sum": 1 },
into $group
stage.
Этап будет выглядеть так:
"$group": {
"_id": null,
"lead_count": {
"$sum": 1
},
"total_cost": {
"$sum": "$cost"
}
}
Обратите внимание, что таким образом вы создаете новое поле и используете $sum : 1
для увеличения единицы для каждого значения.
Это означает: вы создаете поле lead_count
, в котором вы храните количество документов, которые соответствуют первому этапу.
Пример запроса здесь
Комментарии:
1. Это работает. Добавлено a
$project
для удаления_id: null
, и все готово. Спасибо.