我正在使用最新版本的 HapiFHIR(服务器端和客户端),它应该符合 HL7 FHIR。
作为我正在进行的项目的一部分,我需要检索每个设备的最新观察结果。有了 SQL 的经验,我自然希望使用诸如此类的操作GROUP BY
来实现这一点。但是,从阅读文档看来,HapiFHIR 中没有这样的操作!
我错过了什么吗?如果没有,为了检索每个设备的最新(即),什么是一个好的解决方法?sort by date, limit 1
当您使用 FHIR 时,它有一个很好的 REST 搜索 API,不需要实现您自己的查询。
{{baseurl}}/Observation?device:Device=123&_sort=-_lastUpdated&_count=1
为您获取 ID 为 123 的设备的最新观察结果。
编辑:由于您也在使用 HAPI 客户端,因此您的查询代码如下所示:
Bundle results = myFhirCtx.newRestfulGenericClient("yourFHIRbaseURL")
.search()
.forResource(Observation.class)
.where(Observation.DEVICE.hasId("123"))
.sort().descending(Observation.DATE)
.count(1)
.returnBundle(Bundle.class)
.execute();
上面的 GET 搜索设备的最新更新 Observation,JAVA 代码根据其日期获取最新的 Observation。我想你的意思是第二个。
已过时,因为这将返回所有设备的最新 n 观察,而不是每个设备的 N, 对于多个设备:
如果您想一次查询多个设备,您可以通过查询带有 X 型设备的观测值或最新的制造商或型号设备观测值来聚合查询,请参阅:设备资源的搜索参数
如果要查询一组已知设备 ID 的最新 n 个观察值,可以使用 OR 运算符,它只是一个冒号。
{{baseurl}}/Observation?device:Device=123,345,678&_sort=-_lastUpdated&_count=n
在 hapi 客户端代码中:
Bundle results = myFhirCtx.newRestfulGenericClient("ttt")
.search()
.forResource(Observation.class)
.where(Observation.DEVICE.hasAnyOfIds(new ArrayList<String>(Arrays.asList("123", "345", "678" ))))
.sort().descending(Observation.DATE)
.count(n)
.returnBundle(Bundle.class)
.execute();
结论
如果您想获得设备子集的每个设备的最新观察,您可以: