当您使用 FHIR 时,它有一个很好的 REST 搜索 API,您无需实现自己的查询。
{{baseurl}}/Observation?device:Device=123&_sort=-_lastUpdated&_count=1
为您获取 ID 为 123 的设备的最新观察结果。
FHIR search api
编辑:由于您也在使用 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 型设备的观测值或最新的制造商或型号设备观测值来聚合查询,请参阅:search parameters for the Device resource
如果要查询一组已知设备 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();
结论
如果您想获得设备子集的每个设备的 n 个最新观测值,您可以:
- 多次使用本示例的第一个查询
- 或者,如果您更喜欢单个 REST 调用,您可以将这些 GET 调用批处理成批处理包,如下例所示:Batch Bundle search。这将返回一个批处理响应包,其中包含每个搜索的条目。