Развернуть значения словаря в структуре агрегации mongodb - PullRequest
0 голосов
/ 21 ноября 2018

Мне нужно создать несколько графиков из отдельных документов, существующих в mongodb.Я могу использовать только структуру агрегации mongodb (например, я не могу просто вытащить документы в python и поработать с ними там).Я использую построитель запросов метабазы, поэтому я ограничен в этом отношении.

Для этого я сначала использую несколько $match запросов, чтобы определить документы, на которые мне нужно посмотреть(они предопределены и статичны).После этапа $match у меня остался один документ (это нормально) со следующей структурой.

{
 "id": 1,
 "locs": {
    "a":1,
    "b":2, 
    "c":3
  }
}

Мне нужно изменить эту структуру на что-то вроде этого:

[{"a":1}, {"b":2}, {"c":3"}]

или любая другая форма, которая позволила бы мне создавать круговые диаграммы из структуры.

Спасибо!

1 Ответ

0 голосов
/ 21 ноября 2018

Вы можете преобразовать locs объект в массив, используя $objectToArray.Теперь $unwind массив locs для разделения на несколько документов.Используйте $group с аккумулятором $push, чтобы снова преобразовать данные в формат k и v.И, наконец, используйте $replaceRoot с последним полем data, чтобы переместить его в положение $$ROOT.

db.collection.aggregate([
  { "$project": { "data": { "$objectToArray": "$locs" }}},
  { "$unwind": "$data" },
  { "$group": {
    "_id": "$data",
    "data": { "$push": { "k": "$data.k", "v": "$data.v" }}
  }},
  { "$project": {
    "data": { "$arrayToObject": "$data" }
  }},
  { "$replaceRoot": { "newRoot": "$data" }}
])
...