Sha*_*332 4 mongodb aggregation-framework
在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"
]
}
]
}
}
Run Code Online (Sandbox Code Playgroud)
从上面的文档中,我怎样才能在下一个聚合管道中获得下面形状的对象.我需要达到以下形状,以使代码更清洁.我正在使用聚合来达到上面的形状(所以想要附加另一个管道),并且知道在下面的形状得到什么聚合管道会很好
{
"specList” : {
“Internal Storage”: “32 KB”,
“RAM”:”32 MB”,
“Expandable Storage”:”8 GB”,
“Supported Memory Card Type”:”MicroSD”
}
}
Run Code Online (Sandbox Code Playgroud)
不知道完整的管道,你可以用$arrayToObject它转换一个数组运算符成一个单一的文件,但该阵列必须包含两个字段,k并v在k字段包含字段名和v字段包含字段的值.在上面的聚合文档中,您需要将values数组映射到上面的格式,$arrayToObject然后操作符可以愉快地转换.
考虑添加一个$project管道步骤,该步骤使用$map运算符更改数组结构,然后将转换结果应用于所需对象.
以下说明了这一点:
db.collection.aggregate([
{ ... }, // <-- previous pipeline
{
"$project": {
"specList": {
"$arrayToObject": {
"$map": {
"input": "$specificationList.values",
"as": "el",
"in": {
"k": "$$el.key",
"v": { "$arrayElemAt": ["$$el.value", 0] }
}
}
}
}
}
}
])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4071 次 |
| 最近记录: |