在 mongodb 聚合框架中展开字典值
Unwind dictionary values in mongodb aggregation framework
我需要根据 mongodb 中存在的单个文档创建一些图表。我只能使用 mongodb 聚合框架(例如,我不能只将文档拉入 python 并在那里使用它)。我正在使用元数据库的查询生成器,所以我在这方面受到限制。
为此,我首先使用一些 $match
查询来识别我需要查看的文档(这些是预定义的和静态的)。在 $match
阶段之后,我剩下一份具有以下结构的文档(没关系)。
{
"id": 1,
"locs": {
"a":1,
"b":2,
"c":3
}
}
我需要把这个结构改成这样:
[{"a":1}, {"b":2}, {"c":3"}]
或任何其他允许我从结构中创建饼图的形式。
谢谢!
您可以将 locs
对象转换为数组,使用 $objectToArray
. Now $unwind
the locs
array to split into multiple documents. Use $group
with $push
accumulator to make the split data again into k
and v
format. And finally use $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 聚合框架(例如,我不能只将文档拉入 python 并在那里使用它)。我正在使用元数据库的查询生成器,所以我在这方面受到限制。
为此,我首先使用一些 $match
查询来识别我需要查看的文档(这些是预定义的和静态的)。在 $match
阶段之后,我剩下一份具有以下结构的文档(没关系)。
{
"id": 1,
"locs": {
"a":1,
"b":2,
"c":3
}
}
我需要把这个结构改成这样:
[{"a":1}, {"b":2}, {"c":3"}]
或任何其他允许我从结构中创建饼图的形式。
谢谢!
您可以将 locs
对象转换为数组,使用 $objectToArray
. Now $unwind
the locs
array to split into multiple documents. Use $group
with $push
accumulator to make the split data again into k
and v
format. And finally use $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" }}
])