在 mongodb 聚合框架中展开字典值
Posted
技术标签:
【中文标题】在 mongodb 聚合框架中展开字典值【英文标题】:Unwind dictionary values in mongodb aggregation framework 【发布时间】:2018-11-21 16:04:13 【问题描述】:我需要从 mongodb 中存在的单个文档创建一些图。我只能使用 mongodb 聚合框架(例如,我不能只将文档拉入 python 并在那里使用它)。我正在使用元数据库的查询生成器,所以我在这方面受到限制。
为了做到这一点,我首先使用一些$match
查询来识别我需要查看的文档(这些是预定义的和静态的)。在$match
阶段之后,我只剩下一份文件(没关系),其结构如下。
"id": 1,
"locs":
"a":1,
"b":2,
"c":3
我需要把这个结构改成这样:
["a":1, "b":2, "c":3"]
或任何其他允许我从结构中创建饼图的形式。
谢谢!
【问题讨论】:
【参考方案1】:您可以使用$objectToArray
将locs
对象转换为数组。现在将$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"
])
【讨论】:
你摇滚!它工作得几乎完美,我只需要在 $replaceRoot 步骤之前添加一个 "$unwind": "$data" 。 可以在没有$objectToArray
/$arrayToObject
(3.4.4之前)的聚合管道中完成吗?
@Frayt 不。如果你更新你的 mongo 版本会更好,因为引入了新版本是为了舒适以上是关于在 mongodb 聚合框架中展开字典值的主要内容,如果未能解决你的问题,请参考以下文章