MongoDB、Panache、 quarkus :如何进行聚合、$求和和筛选

b4lqfgs4  于 2023-03-01  发布在  Go
关注(0)|答案(1)|浏览(130)

我在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 } }
         }
    ]
)

这个查询绝对可以正常工作。
如何在PanacheMongoRepository中使用 quarkus 实现这个查询?
有什么想法吗?
谢谢!

avwztpqn

avwztpqn1#

有点晚了,但你可以这样做。
定义回购协议
此代码是在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上执行,这是一个Map输出中相关属性的调用。
(您的实体.类)
注解。
希望这个有用。

相关问题