繁体   English   中英

如何在MongoDB中将多个字段组合成数组

[英]How to combine multiple fields into array in MongoDB

我正在使用MongoDB 3.2,我正在尝试弄清楚是否有办法将多个字段组合成一个数组字段。 例如,假设我有一个如下所示的查询:

db.companies.find({},
{
  _id: 0,
  CompanyName: 1,
  CompanyAlias1: 1,
  CompanyAlias2: 1,
  CompanyAlias3: 1,
  CompanyAlias4: 1
}).limit(4);

以上查询返回以下文档:

{ "CompanyName" : "Company ABC", "CompanyAlias1" : "Company ABC, Inc." }
{ "CompanyName" : "ACME Corp.", "CompanyAlias1" : "ACME Corporation", "CompanyAlias2" : "Coyote Lawncare" }
{ "CompanyName" : "Green Tea Sippers" }
{ "CompanyName" : "JS Inc", "CompanyAlias1" : "John Smith Ent", "CompanyAlias2" : "DBA J Smith", "CompanyAlias3" : "Mr. J Tree Climbing", "CompanyAlias4" : "Another crazy name", "CompanyAlias5" : "last one" }

相反,我希望将枚举的CompanyAlias [x]字段组合成一个名为CompanyAliases的数组。 所以结果应如下所示:

{ "CompanyName" : "Company ABC", "CompanyAliases" : [{ "Alias" : "Company ABC, Inc."} ]}
{ "CompanyName" : "ACME Corp.", "CompanyAliases" : [{ "Alias" : "ACME Corporation"}, { "Alias" : "Coyote Lawncare"} ]}
{ "CompanyName" : "Green Tea Sippers" }
{ "CompanyName" : "JS Inc", "CompanyAliases" : [{"Alias" : "John Smith Ent"}, {"Alias" : "DBA J Smith"}, {"Alias" : "Mr. J Tree Climbing"}, {"Alias" : "Another crazy name"}, {"Alias" : "last one"}]}

我是MongoDB的新手,来自RDBMS世界,我仍然围绕着它的许多概念。 任何有关如何实现上述示例的见解都非常感谢!

如果您知道最大别名的数量,则可以显式执行:

db.companies.aggregate([
    {
        $group: {
            _id: {
                _id: '$_id',
                CompanyName: '$CompanyName'
            },
            CompanyAlias1: {
                $push: {
                    Alias: '$CompanyAlias1'
                }
            },
            CompanyAlias2: {
                $push: {
                    Alias: '$CompanyAlias2'
                }
            },
            CompanyAlias3: {
                $push: {
                    Alias: '$CompanyAlias3'
                }
            },
            CompanyAlias4: {
                $push: {
                    Alias: '$CompanyAlias4'
                }
            },
            CompanyAlias5: {
                $push: {
                    Alias: '$CompanyAlias5'
                }
            }
        }
    },
    {
        $project: {
            _id: 0,
            CompanyName: '$_id.CompanyName',
            CompanyAliases: {
                $setUnion: ['$CompanyAlias1', '$CompanyAlias2', '$CompanyAlias3', '$CompanyAlias4', '$CompanyAlias5']
            }
        }
    },
    {
        $project: {
            CompanyName: 1,
            CompanyAliases: {
                $filter: {
                    input: '$CompanyAliases',
                    as: 'alias',
                    cond: {
                        $ne: ['$$alias', {}]
                    }
            }
            }
        }
    }
])

暂无
暂无

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

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