2016-08-04 5 views
1

からデータを取得するためにクエリを記述する私は2つの別々のコレクション、PatientsInvoices持っている:私はすべての請求書を示す表を表示したい流星/モンゴ - どのように別のデータコンテキスト

Patients Collection 

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


Invoices Collection: 

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

を。列の中で、私は請求書が関連していることを患者に示したいと思います(私はInvoicesコレクションのフィールドの1つとしてpatient_idを持っています)。

だから私はこのヘルパーがあります

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

コレクションを定義するときに使用できるオプションの変換関数transformを利用することができます。変換オプションは、ドキュメントをパラメータとして受け取り、変更することができる関数です。ドキュメントは、これはあなたが参加すると同義別collecionからのデータを埋め込むことができますので、fetchまたはfindOneから返される前に、この関数を通過させ、そしてobserveのコールバックに渡される前に、mapforEachallow、およびdenyされます。

あなたの流星アプリをリファクタリングしている場合たとえば、次のように、あなたはあなたのInvoicesコレクションを再定義することができますが:あなたのヘルパーにInvoices.find().fetch()を呼び出すとき

Invoices = new Mongo.Collection('invoices', { 
    transform: function(doc) { 
     doc.patient = Patients.findOne(doc.patient_id); 
     return doc; 
    } 
}); 

さて、あなたはどのpatientプロパティにアクセスする必要があります

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

テンプレート

文書があります
<template name="showInvoices"> 
    {{#each invoices}} 
     <tr> 
      <td>{{invoice_no}}</td> 
      <td>{{patient.first_name}}</td> 
     </tr> 
    {{/each}} 
</template> 
関連する問題