我在 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 中实现此查询?
有什么想法吗?
谢谢!
有点晚了,但你可以这样做。
定义存储库
此代码位于 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)
注释。
希望这有帮助。
是否有 quarkus 的 Java 等效 API