检索单独的文档作为一个对象

时间:2018-07-31 13:00:42

标签: java couchdb ektorp

我有两种基本的文档类型:

  • 具有字段名称和编号的患者;
  • 使用以下字段进行分析 包括3个数组,分析日期,一堆浮点数和一个 PatientId,将其链接到Patient,因此存在1:M关系 在病人和分析之间。

我正在使用Ektorp作为驱动程序。现在有两个POJO,它们反映了文档,并且病人POJO还具有一个Set<Analysis>,由@DocumentReferences批注标记(我实际上并不需要,但是以后可能会用它来显示针对例如一位病人)。

但是,我要做的是使用分页向TableView填充行,其中包含有关Patient AND Analysis的信息,并按分析日期降序排列。 现在,我唯一的想法是

  1. 在CouchDB中查询按日期排序的所有Analysis文档(使用 通过Ektorp中的PageRequest进行分页)
  2. 然后对于每个分析查询数据库,查找有PatientId的患者
  3. 制作一个单独的类,代表表中的一行,其中包含用于患者和分析的字段,然后使用创建该类的对象 检索到Analysis和Patient对象。

在代码中看起来像这样:

PageRequest pageRequest = PageRequest.firstPage(5);

ViewQuery query = new ViewQuery()
    .designDocId("_design/analysis")
    .viewName("by_date")
    .descending(true)
    .includeDocs(true);

Page<Analysis> result = db.queryForPage(query, pageRequest, Analysis.class);
for(Analysis analysis : result) {
    Patient patient = db.find(Patient.class, analysis.getPatientId());
    Row row = new Row(patient, analysis);
    //TODO: ...Populate TableView...
}

这听起来很麻烦。有一个更好的方法吗?我可以一次(或至少一次查询)反序列化我需要的数据吗? 我知道有a way可以使用{_id: doc.patientId}作为emit()函数中的值,以便在通过参数include_docs=true查询时为每个Analysis返回Patient(患者),但是我不确定如何使用对我有利。

我可以将“患者”嵌入到Analysis中,但是如果“患者”发生变化,我将不得不更改每个Analysis文档,所以这不是一个好的解决方案。 我已经多次阅读了these two个文档段落,但是我终生无法弄清楚如何使用Ektorp来实现它们。 任何帮助将不胜感激。

0 个答案:

没有答案