2017-02-09 4 views
0

私は2つのコレクションを持っています。Meteor、query別のコレクションから取得したIDに基づくコレクション

質問!
ItemList Collectionの特定のタイプに基づいて、BorrowerDetailsコレクションからレコードを取得する方法はありますか。

ex。 BorrowerDetails Collectionからすべてのレコードを取得します。ここでkeyは、ItemList CollectionのレコードのIDと等しく、タイプは「Desktop」と等しくなります。

return BorrowerDetails.find(
    { key : 
     ItemList.find(
      { type : 'Desktop' }, 
      { fields: {'_id':1 } } 
     ) 
    } 
); //error! 
+0

NOSQLデータベースを使用する場合、参加するとは思わないでください。代わりに2回選択します。 – Rudy

+0

サーあなたは簡単に説明できますか? :) – Vynterest

+0

私は分を与えます... – Rudy

答えて

0

私のラップトップにはnodejsがありませんので、テストできないためいくつかのエラーが発生する可能性があります。

まず、パブリケーションファイル(例:server \ publications \ borrowPub.js)を作成します。ファイル内にパブリケーションメソッドを作成する必要があります。ここでのロジックは単純で、ルータで、最初のアイテムIDの配列を取得し、その後Mongo select $in.

Meteor.publish('queryBorrowerTypeDesktop', function(criteria) 
{ 

    var itemArr = ItemList.find({ type : 'Desktop' }, 
          { fields: {'_id':1 } }); 
    if(itemArr){ 
    //itemArr found, so do a select in using the array of item id we retrieved earlier 
    var borrowers = BorrowerDetails.find({ key: { $in: itemArr } }); 
    return borrowers; 
    }else{ 
    //found nothing- so return nothing 
    return [] 
    } 
}); 

第二に、それをパラメータとして渡します

Router.route('/test', { 
    name: 'test', 
action: function() 
{ 
    //change accordingly. 
}, 
waitOn: function() 
{//subscribe from publisher that we just created... 
    return [ 
    Meteor.subscribe('queryBorrowerTypeDesktop') 
    ]; 
}, 
data: function() { 
if(Meteor.userId()) 
{ 
    // also include the sorting and limit so your page will not crash. change accordingly. 
    return { 
     borrowerDetails: BorrowerDetails.find({},{sort: {name: -1},  limit: 30}), 
    } 
    } 
} 
}); 

注意をそのデータでは、BorrowerDetails.find()あなたのブラウザのMiniMongoにキャッシュされている購読中にフィルタリングされているため、何かでフィルタリングする必要はありません。

+0

var borrowers = BorrowerDetails.find({qty:{$ in:itemArr}})のqtyは何ですか – Vynterest

+0

"キー"にする必要があります。私は私の答えを更新しました。 – Rudy

関連する問題