2016-09-13 8 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', {}] 
        } 
      } 
      } 
     } 
    } 
]) 
関連する問題