2016-08-05 5 views
0

に参加するときここでは、2つのコレクション流星、私は私のヘルパーのコードがあるかなり確信している。ここのコレクション

Template.Lirescategorie.helpers({ 
    scategories: function() { 
     var cursor = Scategories.find(); 
     var data = []; 
     cursor.forEach(function(somewhat) { 
      var categories = Categories.findOne({_id : somewhat.categorieID}, {categorie:1}); 
      data.push({cat : categories.categorie, scat : somewhat.scategorie }); 
     }); 
     return data; 
    } 

}); 

からデータをdiplayするために私のヘルパーは私のコレクションは

categorie : 
{ 
    "_id": "LBKZQfZZSf4DRdeXo", 
    "categorie": "Citoyenneté" 
} 
scategorie 
{ 
    "_id": "cNHYpAEvC9ffjWkf5", 
    "categorieID": "LBKZQfZZSf4DRdeXo", 
    "scategorie": "Etat-Civil" 
} 

あるさ_.map使用最適ではない。そして、私は_.mapを使うことで、コードを減らすことができると思います。 私はそれに慣れていないので、私はこれについて助けを探しています。

+0

あなたの質問は何ですか? – TyrionGraphiste

+0

私は_Map、またはそのようなforEachのインセットのようなものを使用したい –

答えて

0

クライアントサイドジョインへようこそ。あなたはcategorieIDのリストを取得するには.map()を使用して$in:を一度に第二検索を行うことができます。そして、

var cursor = Scategories.find(); 
var arrayOfCategorieIDs = cursor.map(function(s){return s.categorieId}); 
var categories = Categories.find({_id : {$in: arrayOfCategorieIDs}}); 

var sCategories = cursor.map(function(s){return s.scategorie}); // array of scategorie names 
var categoryNames = categories.map(function(c){return s.categorie}); // array of categorie names 

Then assemble these two arrays of strings into the array of objects you're looking for. 

をしかし、クライアントサイド・ジョインのためのはるかに簡単パターンがあります:1つのカーソルを繰り返して、ヘルパー内の関連するコレクションにルックアップします。たとえば:

HTML:

{{#each sCategories}} 
    {{sCategorie}} 
    {{categorie}} 
{{/each}} 

JS:

Lirescategorie.helpers({ 
    sCategories:(){ 
    return Scategories.find(); 
    }, 
    categorie:(){ 
    return Categories.findOne(this.categorieID).categorie; 
    } 
}); 
関連する問題