【问题标题】:Mongodb for HL7-FHIR用于 HL7-FHIR 的 Mongodb
【发布时间】:2017-02-03 17:14:06
【问题描述】:

学习 FHIR 并尝试使用使用 MongoDb 作为数据库的 MEAN 堆栈来实现,我想就我的问题寻求您的帮助。

当我收到新资源文档的 POST 请求时,我会将其插入 MongoDB。由于 MongoDB 会将 _id(对象 ID)作为唯一 ID 添加到资源中。当我检索文档时,它将具有额外的字段 _id。我认为这会使资源不再合规,因为资源中没有定义_id。

我可以知道如何处理这个问题吗?这个额外的 _id 在 FHIR 资源中是否重要?

最好的问候, 自动运行

【问题讨论】:

    标签: mongodb hl7-fhir


    【解决方案1】:

    所以,我还使用 MongoDB - 以及 mongoose - 在 nodejs 中实现 FHIR。 我刚刚在 mongoose 的模式定义中添加了一个名为 id 的字段,就像这样

    import mongoose from 'mongoose';
    import shortid from 'shortid';
    class resource extends mongoose.Schema {
      constructor(schema) {
        super();
        this.add({
          // just added this to make MongoDB use shortid
          _id: { type: String, default: shortid.generate },
          id: { type: {} },
          id_: { type: {} },
          implicitRules: { type: String },
          implicitRules_: { type: {} },
          language: { type: String },
          language_: { type: {} },
          ...schema
        });
      }
    }
    export default resource;
    

    然后_id 字段在创建/更新资源时从id 获取其值

    我用于更新患者资源的代码

    upsert(root, params, context, ast) {
        const projection = this.getProjection(ast);
        if (!params.data.id) {
          params.data.id = shortid.generate();
        }
        params.data.resourceType = 'Patient';
        const upserted = model
          .findByIdAndUpdate(params.data.id, params.data, {
            new: true,
            upsert: true,
            select: projection
          })
          .exec();
    
        if (!upserted) {
          throw new Error('Error upserting');
        }
        return upserted;
      }
    

    【讨论】:

      【解决方案2】:

      是的,_id 将不符合要求。不能改成'id'?

      【讨论】:

      • 谢谢格雷厄姆。感恩节快乐。 Mongo 使用 _id。而且,它在顶层,但不在标识符子组件之下。
      • 所以它和我们所说的“id”是一样的,但名称不同?
      • 是的,id和_id类似。我正在集思广益,将诸如患者资源之类的资源仅作为 Mongo 文档的一部分。一份文件包含 3 个主要部分。 1. _id 是资源 ID,而不是业务患者 ID,2. 跟踪历史记录或必要资源限定符的元数据,3. 实际资源。 Patient 资源中的标识符数组将包含资源 id (_id) 和患者 MRN。但是,通过这样做,单个“创建”操作将分为 2 个操作 - 添加,然后使用“标识符”下的新资源 ID 进行更新
      • 我在 Mongo 中存储单个资源的转储想法 - { _id: Object_id, _history: history_record, _metadata: other_metadata, fhir_resource: fhir_resource }。在 FHIR 资源中,根据规范,我将有一个标识符数组,可以是驾驶执照、医疗记录号以及 Mongo 资源 id,即 _id。
      【解决方案3】:

      也许你可以看看Spark server,它也使用了一个MongoDB来存储资源。在 Spark.Store.Mongo 命名空间中,您将看到一些帮助方法将 Mongo BSONdocument 转换为 FHIR 资源。

      【讨论】:

      • 谢谢米贾姆。我会研究它,但我对 C# 了解不多。
      • 好吧,没问题,我希望你能看到我们如何从 MongoDB 中取出那个文档,并在我们使用其余数据之前取出 Mongo 添加的额外字段。
      猜你喜欢
      • 2017-12-24
      • 1970-01-01
      • 2019-09-09
      • 2014-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-12
      • 2017-07-13
      相关资源
      最近更新 更多