发布
社区首页 >问答首页 >如何将嵌入式文档数组向上移动到父文档,并使用聚合管道更改键/值

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

Stack Overflow用户
提问于 2019-08-11 00:44:22
回答 1查看 344关注 0票数 2

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

我看过Mongo的聚合框架(特别是$project$replaceRoot$arrayToObject),但没有取得任何进展。

我想转换一下这个

代码语言:javascript
代码运行次数:0
复制
{
    "_id" : 3258,
    "fruits" : [
        {
            "name" : "apple",
            "quantity" : 2
        },
        {
            "name" : "banana",
            "quantity" : 86
        },
        {
            "name" : "orange",
            "quantity" : 4
        },
        {
            "name" : "pineapple",
            "quantity" : 28
        },
        {
            "name" : "strawberry",
            "quantity" : 193
        }
    ]
}

到这个

代码语言:javascript
代码运行次数:0
复制
{
    "_id" : 3258,
    "apple" : 2,
    "banana" : 86,
    "orange" : 4,
    "pineapple" : 28,
    "strawberry": 193
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-11 03:52:08

您需要$replaceRoot$mergeObjects来创建一个包含_id和其他字段的新文档根。还可以运行$arrayToObject将数组转换为单个文档,尝试:

代码语言:javascript
代码运行次数:0
复制
db.collection.aggregate([
    {
        $replaceRoot: {
            newRoot: {
                $mergeObjects: [
                    { _id: "$_id" },
                    { $arrayToObject: { $map: { input: "$fruits", in: [ "$$this.name", "$$this.quantity" ] } } }
                ]
            }
        }
    }
])

蒙戈游乐场

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57446595

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档