繁体   English   中英

将嵌套的 object 字段合并为 MongoDB 聚合中的单个嵌套数组字段

[英]Merging nested object fields into a single nested array field in MongoDB Aggregation

作为我的聚合管道的一部分,我有以下场景。 这是对每个文档中先前展开的字段进行分组的结果(因此在这种情况下,有两个文档具有相同的 _id 但具有不同的 UniqueFieldName 值)

    TopLevelField: [
        {
            UniqueFieldName: "Values go here!"
        },
        {
            UniqueFieldName: "More values go here too!"
        }
    ]

我想要做的就是将嵌套的 object 字段合并到一个字段中,并将所有值作为数组推送到该字段中,就像这样。

    TopLevelField: {
        UniqueFieldName: [
             "Values go here!",
             "More values go here too!",
        ],
    }

我的想法是,我可以将每个字段下具有多个值的多个字段组合在一起,以便于迭代。

    TopLevelField: {
        UniqueFieldName: [
             "Values go here!",
             "More values go here too!",
        ],
        SecondFieldName: [
             "This is text",
        ],
        AnotherOne: [
             "TEXT",
             "Here too!",
             "More values",
        ],
    }

我遇到的问题是尝试在 $group 阶段使用点符号会引发错误。 mongo 好像不喜欢这样用嵌套对象分组?

简单的解决方案是将 TopLevelField 更改为像这样的嵌套字段的一些串联,

    TopLevelField-UniqueFieldName: [
         "Values go here!",
         "More values go here too!",
    ],
    TopLevelField-SecondFieldName: [
         "This is text",
    ],
    TopLevelField-AnotherOne: [
         "TEXT",
         "Here too!",
         "More values",
    ],

但这对我的用例来说不是最优的。 是否有解决方案,或者我是否需要重新考虑整个管道?

你可以试试这个:

db.collection.aggregate([
    { $unwind: '$TopLevelField' },
    {
        $group: {
            _id: '', 'UniqueFieldName': { $push: '$TopLevelField.UniqueFieldName' },
            'UniqueFieldName2': { $push: '$TopLevelField.UniqueFieldName2' },
            'UniqueFieldName3': { $push: '$TopLevelField.UniqueFieldName3' },
            'UniqueFieldName4': { $push: '$TopLevelField.UniqueFieldName4' }
        }
    }, { $project: { _id: 0 } }, { $project: { 'TopLevelField': '$$ROOT' } }])

测试: MongoDB-游乐场

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM