在mongodb聚合框架中展开字典值

时间:2018-11-21 16:04:14

标签: mongodb mongodb-query aggregation-framework metabase

我需要从mongodb中存在的单个文档中创建一些图。我只能使用mongodb聚合框架(例如,我不能仅将文档拉入python并在那里使用它)。我正在使用元数据库的查询生成器,因此在这一方面受到限制。

为此,我首先使用一些$match查询,以识别需要查看的文档(这些文档是预定义的和静态的)。在$match阶段之后,我剩下一个具有以下结构的文档(可以)。

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

我需要将此结构更改为以下内容:

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

或允许我从结构中创建饼图的任何其他形式。

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以使用$objectToArraylocs对象转换为数组。现在$unwind locs数组可拆分为多个文档。将$group$push累加器一起使用,以再次将分割后的数据转换为kv格式。最后,将$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" }}
])