2016-09-13 154 views
1

我正在使用MongoDB 3.2並試圖找出是否有將多個字段組合到數組字段中的方法。舉例來說,假設我有一個查詢,看起來像這樣:如何在MongoDB中將多個字段組合到數組中

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世界未來我仍然得到我的腦海裏纏繞着它的許多概念。關於如何實現上述示例的任何見解都非常感謝!

回答

0

如果你知道最大別名的數量,你可以明確地做到這一點:

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', {}] 
        } 
      } 
      } 
     } 
    } 
]) 
相關問題