java最佳实践:Quarkus中的MongoDB Panache实体一对一关系处理?
遗憾的是Quarkus Guide on using MongoDB with Panache没有提到处理一对多实体关系的最佳做法。注意:我希望对依赖子文档进行建模,但将其作为一个独立的实体。MongoDB站点在:Model One-to-Many Relationships with Document References中演示了此模式,因此您必须在存储库中查找链接到父ID的所有实体
Quarkus(Panache)目前是否提供了使查找更方便的方法
PS:似乎有一个open enhancement request from May 2020来自动获取引用的实体
# 1 楼答案
正如@loicmathieu所告知的,在quarkus中没有直接的方法来执行
populate()
,因为您可以在mongoose中执行。 若您设置了mongoose.set('debug', true)
,那个么您可以首先在控制台中签入它find
已对集合执行查询json文档示例:
标记文档
最后是用户文档
要获取所有文档,我将执行以下查询:
Mongoose以以下方式在内部执行此操作
我在试验基准测试。所以我决定使用quarkus,因为我以前从未使用它构建任何生产应用程序。所以我很快创建了这个模型,到达这个线程时才知道并没有直接的方法来实现基于java的驱动程序中的填充。但是我们可以使用
$lookup
和我们需要的聚合管道。第一种也是最简单的方法是使用mongodb compass工具构建查询,然后简单地用java语言导出结果。我的json查询生成类似于填充查询的输出,如下所示当转换成等价的java时
quarkus控制器代码如下:
对于响应,还有很多其他的事情需要做,比如删除不需要的字段,但是通过这种方式,我可以在node+MongooseAPI上获得相同的结果(除了我在这里跳过的其他一些事情)
# 2 楼答案
MongoDB是一个非关系数据库,这就是为什么它没有一对多关系支持的原因
我没有注意到,子文档是受支持的,您只需创建一个单独的POJO并将其用作实体的属性
不受支持的是,自动将引用的实体从一个集合加载到另一个集合,正如您指出的,有一个开放的it支持增强请求,您可以对此提供反馈(或通过+1投票支持)
目前,对于引用的实体,您需要创建两个实体/存储库,并手动创建fecth