Mongodb 如何将嵌入式文档数组向上移动到父级,并使用聚合管道更改键/值
我有一组文档,每个文档包含一组(简单)文档。我想使用聚合管道将嵌入的文档(“果实”)向上移动到父级,如下面的示例所示。请注意,“name”值将成为父文档中的键 我已经看过Mongo的聚合框架(特别是Mongodb 如何将嵌入式文档数组向上移动到父级,并使用聚合管道更改键/值,mongodb,aggregation-framework,Mongodb,Aggregation Framework,我有一组文档,每个文档包含一组(简单)文档。我想使用聚合管道将嵌入的文档(“果实”)向上移动到父级,如下面的示例所示。请注意,“name”值将成为父文档中的键 我已经看过Mongo的聚合框架(特别是$project,$replaceRoot,$arrayToObject),但没有取得任何进展 我想把这个换成 { "_id" : 3258, "fruits" : [ { "name" : "apple", "quant
$project
,$replaceRoot
,$arrayToObject
),但没有取得任何进展
我想把这个换成
{
"_id" : 3258,
"fruits" : [
{
"name" : "apple",
"quantity" : 2
},
{
"name" : "banana",
"quantity" : 86
},
{
"name" : "orange",
"quantity" : 4
},
{
"name" : "pineapple",
"quantity" : 28
},
{
"name" : "strawberry",
"quantity" : 193
}
]
}
对此
{
"_id" : 3258,
"apple" : 2,
"banana" : 86,
"orange" : 4,
"pineapple" : 28,
"strawberry": 193
}
您需要和来创建一个新的文档根目录,其中包含\u id
和其他字段。您还可以运行将数组转换为单个文档,请尝试:
db.collection.aggregate([
{
$replaceRoot: {
newRoot: {
$mergeObjects: [
{ _id: "$_id" },
{ $arrayToObject: { $map: { input: "$fruits", in: [ "$$this.name", "$$this.quantity" ] } } }
]
}
}
}
])