我对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注释做到这一点?
这是我的第一个问题。如果我不在目标,请原谅我。
答案 0 :(得分:1)
您可能必须创建自定义方法并使用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)
我希望它对你有帮助:)。