meteor,加入集合时使用_.map

时间:2016-08-05 18:36:45

标签: mongodb meteor

以下是我从两个集合中显示数据的助手

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

});

这是我的收藏品

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

我很确定我的助手代码不是最佳的。我认为通过使用_.map或类似的东西,我可以减少代码。 由于我对它并不熟悉,我正在寻求帮助。

1 个答案:

答案 0 :(得分:0)

欢迎使用客户端连接。您可以使用UIImageView获取.map()的列表,并使用categorieID一次性完成第二次查找:

$in:

然后:

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

但是对于客户端连接来说,这是一个更简单的模式:只需迭代一个游标并在帮助程序中查找相关集合。例如:

HTML:

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.

JS:

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