2016-05-23 23 views
2

I持って、次のデータ:モンゴ:JavaのMongoTemplateを経由して集約グループをカウントする方法

{groupId: 1, name: Jon}, 
{groupId: 1, name: Dan}, 
{groupId: 2, name: Jon}, 
{groupId: 2, name: Ris}, 
{groupId: 3, name: David} 

私は、入力としてグループIDの配列を受け取る、と私はそれらの合計でDISTICT名の量をカウントしたいです次のようにグループは、私が集約コードを定義した:

groupIds [] = {1,2} 

    Aggregation agg = newAggregation(
      match(Criteria.where("groupId").in((groupIds)), 
      group("name").count().as("total") 
    ); 

が、私は、それぞれの名前のカウントを含むgroupResult、すなわち取得:

{name : Jon, total : 2} 
{name : Dan, total : 1} 
{name: Ris, total : 1} 

私は実際に私はそれを達成するために、私の集約を調整する必要がない方法です総数= (実際には上記groupResultのサイズである)

を取得したいながら?

ありがとうございます!

p.s.デビッドはカウントから無視される - 最後のグループのサイズを取得するには

答えて

1

を意図したように、あなたはすべての文書グループにキーによってnullグループを使用して、計算することができ、別の最終$groupパイプラインステージを導入することができます累積された合計。

のmongoシェルで

、これはこれは従うべき、春データで

db.collection.aggregate([ 
    { "$match": { "groupId": { "$in": [1, 2] } } }, 
    { 
     "$group": { 
      "_id": "$name"    
     } 
    }, 
    { 
     "$group": { 
      "_id": null, 
      "total": { "$sum": 1 } 
     } 
    } 
]) 

に変換します:

Aggregation agg = newAggregation(
    match(Criteria.where("groupId").in((groupIds)), 
    group("name"), 
    group().count().as("total") 
); 
+0

私がまさに必要でした!ありがとう! – shemerk

関連する問題