2016-08-05 6 views
0

Hier Beitritt ist mein Helfer aus zwei Sammlungsdaten DiplayMeteor, _.map verwenden, wenn Sammlungen

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; 
    } 

}); 

Hier meine Sammlungen sind

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

Ich bin mir ziemlich sicher, dass meine Helfer Code nicht optimal. Und ich denke, mit _.map oder so etwas kann ich den Code reduzieren. Da ich nicht wirklich vertraut bin, suche ich Hilfe zu diesem Thema.

+0

Was ist Ihre Frage? – TyrionGraphiste

+0

Ich möchte _.map oder etwas ähnliches für forEach verwenden –

Antwort

0

Willkommen bei clientseitigen Joins. Sie können .map() verwenden, um die Liste des categorieID s zu erhalten und in einem Rutsch mit $in: den zweiten Fund tun:

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

Dann:

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. 

Aber es gibt ein viel einfacheren Muster für ein clientseitige join : Iterieren Sie einfach über einen Cursor und suchen Sie in einem Helper nach der entsprechenden Kollektion. Zum Beispiel:

html:

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

js:

Lirescategorie.helpers({ 
    sCategories:(){ 
    return Scategories.find(); 
    }, 
    categorie:(){ 
    return Categories.findOne(this.categorieID).categorie; 
    } 
}); 
Verwandte Themen