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

标签 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"}]

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

谢谢!

最佳答案

您可以使用 $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" }}
])

关于mongodb - 在 mongodb 聚合框架中展开字典值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53416040/

相关文章:

node.js - 这是结合 MongoDB 和 Redis 的好方案吗?

mongodb - 在 Mongo/RectiveMongo 中存储/获取列表引用的值的最佳方式?

mongodb - 使用 mongodb 聚合的多个字段的不同计数

java - Spring Data MongoDB - 聚合方法

mongodb - 按日、月、年获取不同的 ISO 日期

django - 使用 mongodb 的 django 和谷歌地图的 GIS 应用程序

mongodb - 按MongoDB中的多个字段分组

mongodb - 有没有办法以 unix 格式向 ISODate 显示时间戳?

mongodb - 如何在mongodb中删除具有特定条件的重复项?

mongodb - 计算符合给定条件的子文档