2016-09-06 3 views
1

mongodb에서 집계 쿼리를 사용하여 컬렉션에있는 모든 문서의 특성 합계를 찾습니다.봄 mongotemplate에 mongodb 집계 쿼리 결과를 저장하는 방법?

쿼리 :

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) 클래스를 사용하여 데이터베이스를 쿼리하고 있습니다.

Mongodb에서 반환 된 결과 개체를 저장하고 특정 필드를 추출하는 방법을 혼동합니다.

Pls 도움.

답변

1

당신이 mongoTemplate 집계를 사용하려고하는 방법은 잘못보십시오. 이것을 시도해 보면 도움이 될 것이라고 확신합니다.

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

는이

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

감사 Wasiq. 결과 데이터 유형을 알려주시겠습니까? 나는 int가 final 일 것을 안다. –

+0

이것은 문제를 해결하지 못했습니다. 나는 아직도 mongo db가 어떤 객체를 반환하고 java에 저장 하는지를 궁금해하고있다. –

+0

mongo의 결과는'document' 객체입니다. 일반 객체로 저장할 수 있습니다. –