MongoDB Atlas 管道导出不会产生相同的结果

问题描述

正在进行一个使用 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 (将#修改为@)