Как объединить несколько документов в MongoDB и преобразовать значения полей в поля

#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"}}])