Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 如何将嵌入式文档数组向上移动到父级,并使用聚合管道更改键/值_Mongodb_Aggregation Framework - Fatal编程技术网

Mongodb 如何将嵌入式文档数组向上移动到父级,并使用聚合管道更改键/值

Mongodb 如何将嵌入式文档数组向上移动到父级,并使用聚合管道更改键/值,mongodb,aggregation-framework,Mongodb,Aggregation Framework,我有一组文档,每个文档包含一组(简单)文档。我想使用聚合管道将嵌入的文档(“果实”)向上移动到父级,如下面的示例所示。请注意,“name”值将成为父文档中的键 我已经看过Mongo的聚合框架(特别是$project,$replaceRoot,$arrayToObject),但没有取得任何进展 我想把这个换成 { "_id" : 3258, "fruits" : [ { "name" : "apple", "quant

我有一组文档,每个文档包含一组(简单)文档。我想使用聚合管道将嵌入的文档(“果实”)向上移动到父级,如下面的示例所示。请注意,“name”值将成为父文档中的键

我已经看过Mongo的聚合框架(特别是
$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" ] } } }
                ]
            }
        }
    }
])