#mongodb
#mongodb
Вопрос:
У меня есть коллекция MongoDB, которую мне удалось обработать с помощью aggregation
конвейера для получения следующего результата:
[
{
_id: 'Complex Numbers',
count: 2
},
{ _id: 'Calculus',
count: 1
}
]
Но результат, к которому я стремлюсь, выглядит примерно так:
{
'Complex Numbers': 2,
'Calculus': 1
}
есть ли способ добиться этого?
Ответ №1:
Запрос
- для преобразования в
{}
нам нужно что-то вроде[[k1 v1] ...]
ИЛИ[{"k" "..." :v "..."}]
- первый этап
- преобразует каждый документ в
[{"k" ".." , "v" ".."}]
- затем
arrayToObject
- и заменить root
- преобразует каждый документ в
- итак, у нас есть каждый документ, подобный
"Complex Numbers": 2
- группа используется для объединения всех этих документов в 1 документ
- а затем заменить корень этим одним документом
aggregate(
[{"$replaceRoot":
{"newRoot": {"$arrayToObject": [[{"k": "$_id", "v": "$count"}]]}}},
{"$group": {"_id": null, "data": {"$mergeObjects": "$ROOT"}}},
{"$replaceRoot": {"newRoot": "$data"}}])