2016-11-28 3 views
1

MongoDBの集計パイプラインで複数のsubcountsを取得します余分な情報のためにセグメントの詳細を検索して、各グループのユニークな "クラス"と "サブクラス"の値を私に与えます。は、次のようにドキュメントのモデルがある

db.getCollection('global_products').aggregate([{ 
     $group :{ 
      _id : { 
       seg:'$taxonomy.segment' 
      }, 
      count : { 
       $sum : 1 
      }, 
      classes: { 
       $addToSet:{ 
        code:'$taxonomy.class' 
       }, 
      }, 
      subclasses: { 
       $addToSet:{ 
        code:'$taxonomy.subclass' 
       } 
      }, 
     } 
    },{ 
     $lookup: { 
      from:'global_taxonomy',localField:'_id.seg',foreignField:'code', as:'segment_details' 
     } 
    }, 
]) 

私はクラスとサブクラスの種類ごとにカウントを追加したいと思いますが、方法を理解できないようです。集約パイプラインを使用することは可能ですか?

は、私は、次のJSONで subcount値を追加したいと思い、明確にする:

{ 
    "_id" : { 
     "seg" : 64000000 
    }, 
    "count" : 1906, 
    "classes" : [ 
     {"code" : 64010200, subcount:x}, 
     {"code" : 64010300, subcount:y}, 
     {"code" : 64010100, subcount:z} 
    ], 
    "subclasses" : [ 
     {"code" : 64010200, subcount:s}, 
     {"code" : 64010300, subcount:t}, 
     {"code" : 64010100, subcount:u} 
    ], 
    "segment_details" : [ 
     { 
      "_id" : ObjectId("572c8eba2b311f69f9c1666a"), 
      "code" : 64000000, 
      "name" : "Main Stock", 
      "type" : "segment" 
     } 
    ] 
} 

答えて

2

あなたは、以下のような何かを試すことができます。そのグループの行数を数えながら、一度に1つのグループ化を行う必要があります。それぞれのサブクラス、クラス、セグメントごとに3つのグループが1つ必要です。 Mongo 3.4にこれに近づくためのより短い方法があるかどうかを見ていきます。

aggregate([{ 
    $group: { 
     _id: { 
      seg: '$taxonomy.segment', 
      classcode: '$taxonomy.class', 
      subclasscode: '$taxonomy.subclass' 
     }, 
     subclasscount: { 
      $sum: 1 
     } 
    } 
}, { 
    $group: { 
     _id: { 
      seg: '$_id.seg', 
      classcode: '$_id.classcode' 
     }, 
     subclasses: { 
      $addToSet: { 
       code: '$_id.subclasscode', 
       subcount: '$subclasscount' 
      } 
     }, 
     classcount: { 
      $sum: 1 
     } 
    } 
}, { 
    $group: { 
     _id: { 
      seg: '$_id.seg' 
     }, 
     classes: { 
      $addToSet: { 
       code: '$_id.classcode', 
       subcount: '$classcount' 
      } 
     }, 
     subclasses: { 
      $first: '$subclasses' 
     }, 
     count: { 
      $sum: 1 
     } 
    } 
}, { 
    $lookup: { 
     from: 'global_taxonomy', 
     localField: '_id.seg', 
     foreignField: 'code', 
     as: 'segment_details' 
    } 
}]) 
+0

出力には次のように表示されます。http://pastebin.com/1pe2kc3C – xShirase

+0

テスト用の入力コレクションを追加できますか? – Veeram

+0

データを準備すると私の誤植が示されました。実際は完璧に働いています。ありがとう! – xShirase

関連する問題