Meteor / Mongo - 如何编写查询以从单独的数据上下文中获取数据

时间:2016-08-04 07:29:17

标签: html mongodb meteor meteor-blaze

我有两个单独的集合,PatientsInvoices

Patients Collection

{
  first_name: ...
  surname: ...
  ...
}


Invoices Collection:

{
  invoice_no: ...
  patient_id: ...
  ...
}

我想显示一张显示所有发票的表格。在列中,我想向患者显示发票与之相关(我已将patient_id作为Invoices集合中的一个字段)。

所以我有这个帮手:

Template.showInvoices.helpers({
  invoices: function () {
    return Invoices.find(); // i know this isn't ideal.
  }
});

这是模板:

<template name="showInvoices">
  {{#each invoices}}
    <tr>
      <td>{{invoice_no}}</td>
      <td> [PATIENT NAME] </td>
    </tr>
  {{/each}}
</template>

如何从发票数据上下文中获取患者姓名?来自MySQL和关系数据库,我不禁想知道这是否适合我的特定情况,因为我不完全确定如何执行此查询。我应该改变我的设计吗?

1 个答案:

答案 0 :(得分:1)

您可以利用定义集合时可用的可选转换功能 transform 。转换选项是一个将文档作为参数并可以修改的函数。文档将在从fetchfindOne返回之前传递给此函数,然后传递给observemapforEach,{{ 1}}和allow因此,这将允许您将来自另一个collecion的数据嵌入到连接中。

例如,如果您要重构流星应用程序,可以按照以下步骤重新定义deny集合:

Invoices

现在,当您在帮助程序中调用Invoices = new Mongo.Collection('invoices', { transform: function(doc) { doc.patient = Patients.findOne(doc.patient_id); return doc; } }); 时,您将可以访问Invoices.find().fetch()属性patient文档:

Patient

<强>模板

Template.showInvoices.helpers({
    invoices: function () {
        return Invoices.find().fetch(); 
    }
});