2016-09-06 7 views
1

私はmongodbで集約クエリを使用して、コレクションにあるすべてのドキュメントの属性の合計を検索しています。mongodb集約クエリ結果をspring mongotemplateに格納するにはどうすればいいですか?

クエリ

db.conversation.aggregate( [ 
{ 
    $match:{ 
     $and:[{"mailBoxId":"1","isHidden":false}] 
     } 
}, 
{ 
    $group: 
    { 
     _id: {"mailBoxId":"$mailBoxId","isHidden":"$isHidden"} , 
     messageCount: { $sum:"$messageCount" } 
    } 
} 
]); 

のMongoDBによって返さ結果は結構ですし、このフォーマットです。

{ 
"result" : [ 
    { 
     "_id" : { 
      "mailBoxId" : "2", 
      "isHidden" : false 
     }, 
     "messageCount" : 2 
    } 
], 
"ok" : 1 
} 

messageCountフィールドが必要です。私はMongoTemplate(Spring)クラスを使用してデータベースを照会しています。

Query retrievalQuery = new Query(); 
    retrievalQuery.addCriteria(Criteria.where("mailBoxId").is(userId).and("isHidden").is(false)); 
    return mongoTemplate.find(retrievalQuery,); 

Mongodbによって返された結果のオブジェクトを格納し、そこから特定のフィールドを抽出する方法が混乱します。

Pls help。

答えて

1

を試してみてください。これを試してみてください。

Aggregation agg = Aggregation.newAggregation(
     Aggregation.match(
       Criteria.where("mailBoxId").is("1").and("isHidden").is(false)), 
     Aggregation.group("$mailBoxId").sum("$unReadMessagesCount").as("unReadMessagesCount") 
    ); 


System.out.println("Query ==>>["+agg.toString()+"]"); 
AggregationResults<AggResultObj> data = mongoTemplate.aggregate(agg, "collectionName", AggResultObj.class); 

System.out.println("UnReadMesasgeCode :"+data.getUniqueMappedResult().getUnReadMessagesCount()); 

AggResultObjはあなたが私はあなたのシナリオに同じのための例を作成している私のブログを見ることができます詳細については

public class AggResultObj{ 
    String _id; 
    int unReadMessagesCount; 

    public String get_id() { 
     return _id; 
    } 
    public void set_id(String _id) { 
     this._id = _id; 
    } 
    public int getUnReadMessagesCount() { 
     return unReadMessagesCount; 
    } 
    public void setUnReadMessagesCount(int unReadMessagesCount) { 
     this.unReadMessagesCount = unReadMessagesCount; 
    } 
} 

のように見えるだろう。クリックしてください。https://satishkumardangi.blogspot.in/2016/09/using-mongo-db-aggregation-with-spring.html

+0

それは機能しました!ありがとう!!! –

0

あなたはmongoTemplateで集計を使用しようとしている方法が間違っているこの

Query retrievalQuery = new Query(); 
    retrievalQuery.addCriteria(Criteria.where("mailBoxId").is(userId).and("isHidden").is(false)); 
var result = mongoTemplate.find(retrievalQuery); 
var final = result[1].messageCount; 
    return final; 
+0

ありがとうございました。結果のデータ型を教えてください。私は最後がintであることを知っている。 –

+0

これは問題を解決しませんでした。私はまだどのオブジェクトがmongo dbを返すのか、それをjavaに保存するのかと不思議です。 –

+0

mongoの結果は 'document'オブジェクトです。通常のオブジェクトとして保存することができます –

関連する問題