簡體   English   中英

如何在Spring MongoTemplate中存儲MongoDB聚合查詢結果?

[英]How to store mongodb aggregate query result in spring 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)類來查詢數據庫。

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

我很困惑如何存儲Mongodb返回的結果對象並從中提取特定字段。

請幫助。

嘗試這個

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;

您嘗試在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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM