首页 > 解决方案 > 在 mongodb 聚合框架中展开字典值

问题描述

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

为了做到这一点,我首先使用一些$match查询来识别我需要查看的文档(这些是预定义的和静态的)。在这个$match阶段之后,我留下了一个具有以下结构的文档(这没关系)。

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

我需要将此结构更改为如下所示:

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

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

谢谢!

标签: mongodbmongodb-queryaggregation-frameworkmetabase

解决方案


您可以locs使用 将对象转换为数组$objectToArray。现在$unwindlocs数组拆分为多个文档。$group与累加器一起使用,$push将拆分的数据再次转换为k格式v。最后使用$replaceRootfinaldata字段将其移动到$$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" }}
])

推荐阅读