我需要从 mongodb 中现有的单个文档创建一些图。我只能使用 mongodb 聚合框架(例如,我不能只将文档拉入 python 并在那里使用它)。我正在使用元数据库的查询生成器,所以我在这方面受到限制。
为此,我首先使用一些 $match
查询来识别我需要查看的文档(这些是预定义的和静态的)。在 $match
阶段之后,我剩下一个具有以下结构的文档(没关系)。
{
"id": 1,
"locs": {
"a":1,
"b":2,
"c":3
}
}
我需要把这个结构改成这样:
[{"a":1}, {"b":2}, {"c":3"}]
或任何其他允许我根据结构创建饼图的形式。
谢谢!
最佳答案
您可以使用 $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" }}
])
关于mongodb - 在 mongodb 聚合框架中展开字典值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53416040/