有没有办法使用 @Query 来 return 一个 MongoDB $sum 结果?

Is there a way to use @Query to return a MongoDB $sum result?

我对 MongoDB 和 Whosebug 都很陌生(作为提问者)。对于如何使用 @Query 注释 (Count in Spring data mongodb repository) return 来自 Spring 存储库的 MongoDB "count" 投影,我看到了很好的回应。

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

...方法 return 是一个整数。我想做类似的事情,但 int I return 是总和而不是计数。 @Query 注释看起来不像是为支持 sum() 操作而构建的,但这正是我需要的。

我担心我被淹没了,我必须遍历一组文档才能得到我需要的结果。

我有一组交易记录(例如借方和贷方、正数和负数)。这是交易数据的模拟:

[{ "action" : "AWARD", "amount" : 9000, "notes" : "Initial balance", "username" : "aa" }, { "action" : "PAYOUT", "amount" : 1800, "notes" : "Earnings", "username" : "aa" }, { "action" : "WITHDRAWAL", "amount" : -5000, "notes" : "Direct deposit /r#e#d#a#c#t#e#d/", "username" : "aa" }, { "action" : "AWARD", "amount" : 7000, "notes" : "Initial balance", "username" : "bb" }]

我想使用存储库获取给定用户名的各种交易的净额(总和)。如果可能的话,我宁愿不 return 所有 Mongo 文档的列表并遍历它们以获得总和。

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

这是我的第一个问题。如有失误请见谅

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

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

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

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

希望对您有所帮助:)