2016-02-03 24 views
10

parentIdcategioryIdllcIdと一緒にキーワードカウントを取得しようとしています。 私のDBは、私が$group

db.keyword.aggregate([ 
    { 
     $group: { 
      _id: "$llcId", 
      total: {$sum: 1}, 
     } 
    }, 
    { 
     $project: { 
      categoryId: 1, total: 1 
     } 
    } 
]) 

$projectを試してみました

{ 
    "_id" : ObjectId("5673f5b1e4b0822f6f0a5b89"), 
    "keyword" : "electronic content management system", 
    "llcId" : "CL1K9B", 
    "categoryId" : "CL1K8V", 
    "parentId" : "CL1K8V", 

} 

あり、それは私に

{ "_id" : "CL1KJQ", "total" : 17 } 
{ "_id" : "CL1KKW", "total" : 30 } 

のような結果を与えるしかし、私はまた、例えば、結果に実際のデータを必要としますllcId,categoryId,keyword,total。私は$projectを使ってcetgoryIdとキーワードを表示しようとしましたが、それは_idと合計だけを表示します。私は何が欠けているのですか?

+0

uはあなたがあなたの –

+0

アグリゲーションパイプラインがllcId' 'の値ごとにドキュメントの数を返します。必要なサンプル出力を書き込むことができます。それはあなたが欲しいものですか? – dgiugg

答えて

12

あなたはドキュメントがカウントを取得するために、アキュムレータのオペレータ$sumを使用し、その後、グループにkeywordフィールドによって書類が必要と思いますkeywordカウントを取得します。他のフィールド値については、すべてのドキュメントをキーワード値でグループ化するので、他のフィールドを取得するのに最善の方法は、各グループの最初のドキュメントから値を返す$first演算子を使用することです。それ以外の場合は、各グループのフィールド値の配列を返すように$push演算子を使用する必要があります:あなたはllcIdによってグループ化されている

var pipeline = [ 
    { 
     "$group": { 
      "_id": "$keyword", 
      "total": { "$sum": 1 }, 
      "llcId": { "$first": "$llcId"}, 
      "categoryId": { "$first": "$categoryId"}, 
      "parentId": { "$first": "$parentId"} 
     } 
    } 
]; 

db.keyword.aggregate(pipeline) 
+0

どのようにすれば、anglejs ng-repeatを使って$ push演算子データを表示できますか? – SrividhyaShama

1

ので、それはllcIdごとに複数のcategoryIdを与えるだろう。 categoryIdのようにしたい場合は、グループクエリにそれを書き込む必要があります。たとえば:

db.keyword.aggregate([ 
{ 
    $group: { 
     _id: "$llcId", 
     total: {$sum: 1}, 
     categoryId:{$max:"$categoryId"} 
    } 

}, 
{ 
    $project: { 
     categoryId: 1, total: 1 
    } 
}]) 
関連する問題