这可以使用聚合管道来完成。
使用的管道阶段是$addFields、$project 和$replaceRoot
下面是用来获取结果的查询
db.a.aggregate([
{
$addFields: {
arr: [
{
k: "$key",
v: "$value"
}
]
}
},
{
$project: {
_id: 1,
newAttrs: {
$arrayToObject: {
$map: {
input: "$arr",
as: "pair",
in: [
"$$pair.k",
"$$pair.v"
]
}
}
}
}
},
{
$replaceRoot: {
newRoot: {
$mergeObjects: [
{
_id: "$_id"
},
"$newAttrs"
]
}
}
}
]);
使用的样本数据:
{"_id":1,"key":"some_key","value":"some_value"}
{"_id":2,"key":"my_key","value":"my_value"}
{"_id":3,"key":"test_key","value":"test_value"}
{"_id":4,"key":"new_key","value":"new_value"}
得到的结果:
{"_id":1,"some_key":"some_value"}
{"_id":2,"my_key":"my_value"}
{"_id":3,"test_key":"test_value"}
{"_id":4,"new_key":"new_value"}