我正在尝试将一组文档合并到一个集合 A 中。
{'s': 'v1', 'id': 1}
{'s': 'v2', 'id': 2}
{'s': 'v3', 'id': 3}
{'s': 'v4', 'id': 4}
将其转换为一组键值对的独特文档,如下所示。
{
'v1': 1,
'v2': 2,
'v3': 3,
'v4': 4
}
你能否提供一种使用唯一的MongoDB命令而不需要将数据存储到另一个集合中来完成此操作的方式?
$group
和$addToSet
,从所有文档中创建一个包含键值对的数组$set
和$arrayToObject
,将上一步骤生成的数组转换为一个对象,并将其赋值给result字段$replaceRoot
,用前一步骤生成的result字段替换根文档db.collection.aggregate([
{
"$group": {
"_id": null,
"result": {
"$addToSet": {
"k": "$s",
"v": "$id"
}
}
}
},
{
"$set": {
"result": {
"$arrayToObject": "$result"
}
}
},
{
"$replaceRoot": {
"newRoot": "$result"
}
}
])