MongoDB、Panache、Quarkus:如何进行聚合、$sum 和过滤器

问题描述 投票:0回答:2

我在 mongodb 中有一个表,其中包含销售交易,每个表包含一个 userId、一个时间戳和特定销售交易的相应收入值。

现在,我想查询这些用户并获取所有用户所有交易的最小值、最大值、总和和平均值。应该只在两个给定时间戳之间有交易,并且应该只包括收入总和大于指定值的用户。

我已经在 mongosh 中编写了相应的查询:

db.salestransactions.aggregate(
        {
            "$match": { 
                "timestamp": {
                        "$gte": new ISODate("2020-01-01T19:28:38.000Z"),
                        "$lte": new ISODate("2020-03-01T19:28:38.000Z")
                }
            }
        }, 
        {
            $group: { 
                _id: { userId: "$userId" }, 
                minimum: {$min: "$revenue"},
                maximum: {$max: "$revenue"},
                sum: {$sum: "$revenue"},
                avg: {$avg: "$revenue"}
            }
        },
         { 
            $match: { "sum": { $gt: 10 } }
         }
    ]
)

这个查询工作得非常好。

如何使用 quarkus 在 PanacheMongoRepository 中实现此查询?

有什么想法吗?

谢谢!

mongodb sum aggregate quarkus quarkus-panache
2个回答
1
投票

有点晚了,但你可以这样做。

定义存储库

此代码位于 kotkin 中

class YourRepositoryReactive : ReactivePanacheMongoRepository<YourEntity>{

fun getDomainDocuments():List<YourView>{
 
val aggregationPipeline = mutableListOf<Bson>()

// create your each stage with Document.parse("stage_obj") and add to aggregates collections

   return mongoCollection().aggregate(aggregationPipeline,YourView::class.java)
   } 

mongoCollection() 自动在您的实体上执行 YourView,对输出的映射相关属性部分的调用。确保该类有

@ProjectionFor(YourEntity.class)

注释。

希望这有帮助。


0
投票

是否有 quarkus 的 Java 等效 API

© www.soinside.com 2019 - 2024. All rights reserved.