将对象数组转换为对象
Convert array of objects, to object
我有一个 mongo 这样的数据库记录
items: [
0: {
key: name,
value: y
},
1: {
key: module,
value: z
}
]
每条记录我的预期输出是这样的
{
name : y,
module : z
}
什么是最好的 mongo 我应该应用数据库聚合来实现这一点。我尝试了几种方法,但无法产生输出。
我们不能使用 unwind 否则它会破坏 name 和 module 之间的关系。
查询
- 项目数组几乎准备好成为
document {}
$map
重命名key->k
和value->v
(那些是mongo需要的字段名)
$arrayToObject
使项目 [] => {}
- 然后将项目文档与根文档合并
- 并投影
items {}
(我们不再需要它了,字段现在是根文档的一部分)
*你可以把2个$set
合并成1个阶段,我写成2个比较简单
aggregate(
[{"$set":
{"items":
{"$map":
{"input": "$items", "in": {"k": "$$this.key", "v": "$$this.value"}}}}},
{"$set": {"items": {"$arrayToObject": ["$items"]}}},
{"$replaceRoot": {"newRoot": {"$mergeObjects": ["$items", "$$ROOT"]}}},
{"$project": {"items": 0}}])
aggregate(
[{
$project: {
items: {
$map: {
input: "$items",
"in": {
"k": "$$this.key",
"v": "$$this.value"
}
}
}
}
}, {
$project: {
items: {
$arrayToObject: "$items"
}
}
}])
我有一个 mongo 这样的数据库记录
items: [
0: {
key: name,
value: y
},
1: {
key: module,
value: z
}
]
每条记录我的预期输出是这样的
{
name : y,
module : z
}
什么是最好的 mongo 我应该应用数据库聚合来实现这一点。我尝试了几种方法,但无法产生输出。 我们不能使用 unwind 否则它会破坏 name 和 module 之间的关系。
查询
- 项目数组几乎准备好成为
document {}
$map
重命名key->k
和value->v
(那些是mongo需要的字段名)$arrayToObject
使项目 [] => {}- 然后将项目文档与根文档合并
- 并投影
items {}
(我们不再需要它了,字段现在是根文档的一部分)
*你可以把2个$set
合并成1个阶段,我写成2个比较简单
aggregate(
[{"$set":
{"items":
{"$map":
{"input": "$items", "in": {"k": "$$this.key", "v": "$$this.value"}}}}},
{"$set": {"items": {"$arrayToObject": ["$items"]}}},
{"$replaceRoot": {"newRoot": {"$mergeObjects": ["$items", "$$ROOT"]}}},
{"$project": {"items": 0}}])
aggregate(
[{
$project: {
items: {
$map: {
input: "$items",
"in": {
"k": "$$this.key",
"v": "$$this.value"
}
}
}
}
}, {
$project: {
items: {
$arrayToObject: "$items"
}
}
}])