问题描述
我正在进行一个使用 Panache 作为 ORM 的 quarkus 项目。我的任务听起来很简单,我有一个有效的 Mongodb 管道,我想将它转移到我们的项目中。奇怪的是,结果不一样。
我有以下管道:
[
{$sort: {
version: 1
}},{$group: {
_id: {
name: '$name',namespace: '$namespace'
},version: {
$last: '$version'
},object: {
$last: '$$ROOT'
}
}},{$sort: {
'object.namespace': 1,'object.name': 1
}},{$project: {
object: 1,_id: 0
}},{$replaceRoot: {
newRoot: '$object'
}}
]
所以我正在排序,按名称和命名空间分组,聚合最高版本并保存具有最高版本的对象本身。我只投影对象本身并用根对象替换它,这样我就有了我的 List<POJO>
结构。
这会产生正确的结果(包括其中具有最高版本的多个文档)
为 Java 导出,它看起来像这样:
Arrays.asList(
sort(ascending("version")),group(and(eq("name","$name"),eq("namespace","$namespace")),last("version","$version"),last("object","$$ROOT")),sort(orderBy(ascending("object.namespace"),ascending("object.name"))),project(fields(include("object"),excludeId())),replaceRoot("$object")
)
我是这样使用的(数组就是上面提到的数组):
List<MyPanacheEntityModelClass> list = MyPanacheEntityModelClass.mongoCollection().aggregate(array)
.into(new ArrayList<>())
.stream().map(x -> (MyPanacheEntityModelClass) x).collect(Collectors.toList());
这只会生成版本号最高的对象。
我有点被困在如何调试这个问题上,因为如果我想逐步尝试这些阶段,一旦我分组,我就不会得到 MyPanacheEntityModelClass 形式的结果,而且它似乎总是尝试强制转换它显然失败了。
在我看来,我的 last($version)
函数也有一些小缺陷,是不是我遗漏了什么?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)