2016-10-15 3 views
0

私はドキュメントのコレクションを持っています。各ドキュメントには、codestatusという2つのフィールドがあります。マイMongoDBのコレクションは、次のようないくつかのドキュメントが含まれていますスプリングデータで集計を使用する方法mongodb

[{ 
    "code":"1234", 
    "status":"A" 
}, 
{ 
    "code":"1234", 
    "status":"A" 
} 
{ 
    "code":"1234", 
    "status":"B" 
}, 
{ 
    "code":"1235", 
    "status":"A" 
}] 

私はコードあたりの状態によってカウント見つけたいと思います。私の望む出力は次のようなものです:

[ 
    {"code":"1234", "counts": {"A":2, "B":1}}, 
    {"code":"1235", "counts": {"A":1, "B":0}} 
] 

私はこれを春のデータmongodbでどうやってできますか?私はmongodbにはとても新しいです。

更新 私はmongodbクエリを書くことができました。ここにあります:

春のデータmongodbでこのクエリを書く方法についてお手伝いできますか?

答えて

1

コード

DBObject counts= new BasicDBObject(); 
counts.put("status", "status"); 
counts.put("count", "count"); 

AggregationResults<Output> results = operations.aggregate(
    newAggregation(Codes.class, 
     group("code","status").count().as("count"), 
     group("code").push(counts).as("counts") 
), Output.class); 

以下でチェックしてください私はあなたの望ましい結果クラスとしてご入力文書クラスとOutput.javaクラスとしてCodes.javaクラスを検討しました。

+0

ありがとうございます。 – Nayan

+0

いつでもようこそ。 –

0

トリッキーなクエリですが、これはmongodbの外側にもう一度足を踏み入れるだけでうまくいくはずです。あなたの質問の春の部分については、それについてのチュートリアルがたくさんあります。

db.codes.aggregate(
    {$group: {_id: {code: "$code", status: "$status"}, count: {$sum: 1}}}, 
    {$group: {_id: "$_id.code", "counts": {$push: {status: "$_id.status", count: "$count"}}}}) 

{ "_id" : 123, "counts" : [ { "status" : "B", "count" : 1 }, { "status" : "A", "count" : 1 } ] } 
{ "_id" : 124, "counts" : [ { "status" : "C", "count" : 2 }, { "status" : "B", "count" : 1 } ] } 
+0

ありがとうございます。私はすでに質問をmongoで書いており、質問を更新しました。私は今、春にそれを書こうとしています。 – Nayan

+0

涼しいですが、春にお手伝いできませんが、私はRuby-devです。私の答えを受け入れるのはどうですか? –

+0

私は春の部分も解決しました。あなたの答えを編集し、Javaの部分を追加することはできますか? – Nayan

関連する問題