如何使用 MongoTemplate 对 mongodb 内部字段求和并在分组期间将其推送
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[=25= 的数组形式出现的] 在这里(因为我直接使用推送)。我可以在推送操作中使用上面的总和来实现相同的目的。但不能将其用于 MongoTemplate。我的应用程序在 Spring 启动。我也查看了这些方法的文档,但找不到太多。
此外,我也尝试在现场直接使用 .sum() (不使用推送),但这对我不起作用,因为 my_field 是一个内部对象,它不是一个数字但是分组后的一组数字。这就是为什么我需要使用 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 并对内部字段求和并获得所需的输出。然后我将其传递到分组阶段,在那里我进行了计数聚合,因为我也需要这些数据,然后必须投影生成的所有数据以作为输出收集。
我可以在 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[=25= 的数组形式出现的] 在这里(因为我直接使用推送)。我可以在推送操作中使用上面的总和来实现相同的目的。但不能将其用于 MongoTemplate。我的应用程序在 Spring 启动。我也查看了这些方法的文档,但找不到太多。
此外,我也尝试在现场直接使用 .sum() (不使用推送),但这对我不起作用,因为 my_field 是一个内部对象,它不是一个数字但是分组后的一组数字。这就是为什么我需要使用 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 并对内部字段求和并获得所需的输出。然后我将其传递到分组阶段,在那里我进行了计数聚合,因为我也需要这些数据,然后必须投影生成的所有数据以作为输出收集。