我需要从mongodb中存在的单个文档中创建一些图。我只能使用mongodb聚合框架(例如,我不能仅将文档拉入python并在那里使用它)。我正在使用元数据库的查询生成器,因此在这一方面受到限制。
为此,我首先使用一些$match
查询,以识别需要查看的文档(这些文档是预定义的和静态的)。在$match
阶段之后,我剩下一个具有以下结构的文档(可以)。
{
"id": 1,
"locs": {
"a":1,
"b":2,
"c":3
}
}
我需要将此结构更改为以下内容:
[{"a":1}, {"b":2}, {"c":3"}]
或允许我从结构中创建饼图的任何其他形式。
谢谢!
答案 0 :(得分: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" }}
])