簡體   English   中英

如何對 mongodb 內部字段求和並在使用 MongoTemplate 進行分組期間推送它

[英]How to sum a mongodb inner field and push it during grouping using MongoTemplate

我可以在 MongoDB 控制台的推送操作中使用總和。 但是,我不知道如何使用 MongoTemplate 做同樣的事情?

$group : {
     _id: "$some_id",
     my_field: { $push : {$sum: "$my_field" }}
 }

我為此使用的代碼類似於:

Aggregation aggregation =
    Aggregation.newAggregation(
        match(matchingCriteria),
        group("some_id")
            .count()
            .as("count")
            .push("my_field")
            .as("my_field")
        project("some_id", "count", "my_field"));
AggregationResults<MyModel> result =
    mongoTemplate.aggregate(aggregation, "my_collection", MyModel.class);

問題是我想要my_field的總和,但它在這里作為my_field的數組出現(因為我直接使用推送)。 我可以在推送操作中使用上述總和來實現相同的目的。 但無法將其用於 MongoTemplate。 我的應用程序在 Spring 引導中。 我還查看了這些方法的文檔,但找不到太多。

此外,我也嘗試在現場直接使用.sum()(不使用推送),但這對我不起作用,因為 my_field 是一個內部 object,它不是一個數字,而是分組后的一個數字數組。 這就是為什么我需要使用 push 和 sum 組合。

對此的任何幫助表示贊賞。 提前致謝。

我能夠使用以下代碼使其工作:

Aggregation aggregation =
    Aggregation.newAggregation(
        match(allTestMatchingCriteria),
        project("some_id")
            .and(AccumulatorOperators.Sum.sumOf("my_field"))
            .as("my_field_sum")
        group("some_id")
            .count()
            .as("count")
            .push("my_field_sum")
            .as("my_field_sum"),
        project("some_id", "count", "my_field_sum"));
AggregationResults<MyModel> result =
    mongoTemplate.aggregate(aggregation, "my_collection", MyModel.class);

我在投影階段本身使用了AccumulatorOperators.Sum並對內部字段求和並獲得所需的 output。 然后我將它傳遞到分組階段,在那里我進行計數聚合,因為我也需要該數據,然后必須將生成的所有數據投影為 output。

暫無
暫無

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

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