mongodb - 在 mongodb 聚合框架中展开字典值
问题描述
我需要从 mongodb 中存在的单个文档创建一些图。我只能使用 mongodb 聚合框架(例如,我不能只将文档拉入 python 并在那里使用它)。我正在使用元数据库的查询生成器,所以我在这方面受到限制。
为了做到这一点,我首先使用一些$match
查询来识别我需要查看的文档(这些是预定义的和静态的)。在这个$match
阶段之后,我留下了一个具有以下结构的文档(这没关系)。
{
"id": 1,
"locs": {
"a":1,
"b":2,
"c":3
}
}
我需要将此结构更改为如下所示:
[{"a":1}, {"b":2}, {"c":3"}]
或任何其他允许我从结构中创建饼图的形式。
谢谢!
解决方案
您可以locs
使用 将对象转换为数组$objectToArray
。现在$unwind
将locs
数组拆分为多个文档。$group
与累加器一起使用,$push
将拆分的数据再次转换为k
格式v
。最后使用$replaceRoot
finaldata
字段将其移动到$$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" }}
])
推荐阅读
- javascript - 如何在jquery的下拉菜单中构造一个带有字母的单词
- python - 我希望使用 python 在 selenium 中单击一个按钮。我得到一个错误“列表”对象没有属性“点击”
- wordpress - 在 Apache 上下文中从 bash 脚本调用时,防止 wp-cli 将 gzip'ed 流写入标准输出?
- python-3.x - 需要通过带有上传文件选项的机器人框架发出 POST 请求
- javascript - 有什么办法可以循环这个吗?
- java - jsf中不能调用Bean?
- lua - '结束'预计在'附近'
' 我的代码中的错误 - java - 如何使用 Azure Java SDK 从 Java 后端连接到 Azure Key Vault?
- python - Scipy.linalg 矩阵乘法实现,全部在 C 中还是在 Fortran 中?
- angular - 无法到达这一边 - Windows 10 上的 docker 中的角度