mongodb - Mongo 聚合 - 遍历文档中的多个对象并仅返回键:值
问题描述
考虑下一个文档:
_id:ObjectId("6085c476e5989552b4bf18fb")
employeeName: {needDisasseble: false, mark: false, value: "Bobi brown"},
employeeNumber: {needDisasseble: false, mark: false, value: "12556"},
employerName: {needDisasseble: false, mark: false, value: "Intel"},
child1Name: {needDisasseble: false, mark: false, value: "Jhon hopkins"},
child2Name: {needDisasseble: false, mark: false, value: "Donna dick"},
我正在尝试实现两件事:
- 遍历所有对象并返回 objectKey:objectkey.value => employeeName: "Bobi brown";
- 我想丢弃所有键名中不包含“child”的对象。
我知道如何在纯 JS 中做到这一点,但是如何使用聚合管道实现相同的结果?
解决方案
如果它将来可以帮助任何人:
db.element.aggregate([
{"$project":{_id:0,"arrayofkeyvalue":{"$objectToArray":"$$ROOT"}}},
{ $match : { "arrayofkeyvalue.k" : /^child/ } },
{ $project :
{ _id :1,
"arrayofkeyvalue": {
"$arrayToObject": {
"$map": {
"input": "$arrayofkeyvalue",
"as": "el",
"in": {
"k": "$$el.k",
"v": {
$cond : {
if :{
$eq :["$$el.v.value",undefined]
},
then: "$$el.v",
else: "$$el.v.value"
}
}
}
}
}
}
}
},
{ "$replaceRoot": { "newRoot": "$arrayofkeyvalue" } },
]
)
推荐阅读
- javascript - 如何在angular js中升级fullcalendar 4.4版
- c# - C# 中的 ArrayOfXElement 到 DataSet
- keras - 冻结层的特定过滤器以在 Keras 中进行修剪
- python - 从 tflearn 转换为 keras
- android - Android 在启动时使用 init.rc 运行脚本不起作用
- javascript - 无法从 Firebase 读取数据
- javascript - 在更改时返回选定的值,并且在取消选择时不重复
- java - 如何从另一个 JFrame 执行 JButton 代码
- google-kubernetes-engine - 将数据从 Kubernetes 引擎中的 docker 容器存储到 GCS 时出现“权限不足”错误
- macos - QAction 图标无法点击