1

我正在使用最新版本的 HapiFHIR(服务器端和客户端),它应该符合 HL7 FHIR。

作为我正在进行的项目的一部分,我需要检索每个设备的最新观察结果。有了 SQL 的经验,我自然希望使用诸如此类的操作GROUP BY来实现这一点。但是,从阅读文档看来,HapiFHIR 中没有这样的操作!

我错过了什么吗?如果没有,为了检索每个设备的最新(即),什么是一个好的解决方法?sort by date, limit 1

4

1 回答 1

2

当您使用 FHIR 时,它有一个很好的 REST 搜索 API,不需要实现您自己的查询。

{{baseurl}}/Observation?device:Device=123&_sort=-_lastUpdated&_count=1

为您获取 ID 为 123 的设备的最新观察结果。

FHIR 搜索 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 型设备的观测值或最新的制造商或型号设备观测值来聚合查询,请参阅:设备资源的搜索参数

如果要查询一组已知设备 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();

结论

如果您想获得设备子集的每个设备的最新观察,您可以:

  • 多次使用此示例的第一个查询
  • 或者,如果您更喜欢单个 REST 调用,您可以将这些 GET 调用批处理成批处理包,如下例所示:Batch Bundle search。这将返回一个批处理响应包,其中包含每个搜索的条目。
于 2018-06-18T22:19:42.267 回答