有没有办法使用@Query返回MongoDB $ sum结果?

时间:2015-05-07 01:36:01

标签: spring mongodb aggregation-framework spring-mongodb

我对MongoDB和StackOverflow都很陌生(作为提问者)。我已经看到了如何使用@Query注释(Count in Spring data mongodb repository)从Spring存储库返回MongoDB“计数”投影的响应。

基本上,计数示例如下: @Query(value =“{'productDetails.productType':{$ regex:?0,$ options:'i'},'sourceDescriptor':?1}”,count = true)

...并且该方法返回一个int。我想做类似的事情,但我返回的int是一个总和而不是一个计数。 @Query注释看起来不像是为了支持sum()操作,但这就是我需要的。

我担心自己被冲洗了,我必须迭代一系列文件才能得到我需要的结果。

我有一系列交易(如借记和贷记,正数和负数)。这是交易数据的模拟:

[{“action”:“AWARD”,“amount”:9000,“notes”:“初始余额”,“用户名”:“aa”}, {“action”:“PAYOUT”,“amount”:1800,“notes”:“收入”,“用户名”:“aa”}, {“action”:“WITHDRAWAL”,“amount”: - 5000,“notes”:“直接存款/ r#e#d#a#c#t#e#d /”,“username”:“aa”} , {“action”:“AWARD”,“金额”:7000,“注释”:“初始余额”,“用户名”:“bb”}]

我想使用存储库获取给定用户名的各种事务的净(总和)。如果可能的话,我宁愿不返回所有Mongo文档的列表,并迭代它们以获得总和。

有没有办法使用@Query注释做到这一点?

这是我的第一个问题。如果我不在目标,请原谅我。

1 个答案:

答案 0 :(得分:1)

嗯,我认为@Query注释无法完成mongo聚合(如果我没有错,查询和聚合是不同类型的操作):(

您可能必须创建自定义方法并使用Spring附带的Fluent Interface实现它,例如,如果您想要$ sum,聚合将如下所示:

TypedAggregation<YourClass.class> agg = newAggregation(YourClass.class,
   group("username").sum("amount").as("totalAmount"),
   project("totalAmount"));

AggregationResults<YourResultClassContainingOnlyTotalAmount> result =
   mongoTemplate.aggregate(agg, YourResultClassContainingOnlyTotalAmount.class)

我希望它对你有帮助:)。