在 mongodb 中,运行聚合后我有一个以下形状的 get 对象。
{
"_id": 1,
"specificationList": {
"key": "Memory & Storage Features",
"values": [
{
"key": "Internal Storage",
"value": [
"32 KB"
]
},
{
"key": "RAM",
"value": [
"32 MB"
]
},
{
"key": "Expandable Storage",
"value": [
"8 GB"
]
},
{
"key": "Supported Memory Card Type",
"value": [
"MicroSD"
]
}
]
}
}
从上面的文档中,我如何在下一个聚合管道中获取以下形状的对象。我需要达到以下形状以使代码更清晰。我正在使用聚合来达到上面的形状(所以想附加另一个管道),并且很高兴知道要获得下面的形状的聚合管道
{
"specList” : {
“Internal Storage”: “32 KB”,
“RAM”:”32 MB”,
“Expandable Storage”:”8 GB”,
“Supported Memory Card Type”:”MicroSD”
}
}
在不知道完整管道的情况下,您可以使用$arrayToObject https://docs.mongodb.com/manual/reference/operator/aggregation/arrayToObject/运算符将数组转换为单个文档,但数组必须包含两个字段,k
and v
哪里的k
字段包含字段名称和v
字段包含字段的值。在上面的汇总文档中,您需要映射
值数组为上述格式$arrayToObject https://docs.mongodb.com/manual/reference/operator/aggregation/arrayToObject/然后操作员就可以愉快地进行转换了。
考虑添加一个$project https://docs.mongodb.com/manual/reference/operator/aggregation/project/管道步骤使用$map https://docs.mongodb.com/manual/reference/operator/aggregation/map/运算符更改数组结构,然后将转换结果应用到所需的对象。
下图说明了这一点:
db.collection.aggregate([
{ ... }, // <-- previous pipeline
{
"$project": {
"specList": {
"$arrayToObject": {
"$map": {
"input": "$specificationList.values",
"as": "el",
"in": {
"k": "$$el.key",
"v": { "$arrayElemAt": ["$$el.value", 0] }
}
}
}
}
}
}
])
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)