假设我想创建一个用户在其帐户中玩过的所有游戏的分数列表。每个用户在MongoDB中都有一个对象,该对象通过userId
键附加到他/她的_id,并且有一个data
键(其中包含一个对象数组,每个对象都有游戏名称和比赛得分)。它看起来像这样:
var mongoDB = {userId: "thisistheuserid",
data: [{obj1},{obj2},{obj3},{obj4}...] };
数据的对象如下所示:
data: {Title: "Name of game",
Score: 10};
我要做的是在客户端向用户显示所有游戏标题和分数。我通过这个HTML来做到这一点:
{{#each helper}}
<li>{{Title}}: {{Score}}</li>
{{/each}}
现在,如果文档只是简单地在MongoDB中,那么很容易列出客户端中的所有项目:
helper: function(){
return Collection.find({});
}
我想要做的是将所有游戏标题和分数列出给用户,但不知道如何通过进入2个对象和一个数组来获取信息。我可以尝试find().fetch()
,但这似乎并不能让我真正能够列出所有项目。
现在,对于帮助函数,我有:
helper: function(){
return Collection.find({userId: this.userId}, {"data.Title": {}});
}
以上,如果它能正常工作,就会给出游戏的标题。但我在这里做错了。我有一种感觉,这太容易了,我错过了一件让我无法正确显示数据的事情。
答案 0 :(得分:1)
要访问嵌套对象,您只需使用`{{#with}}来确定数据上下文的范围:
{{#each helper}}
{{#with data}}
<li>{{Title}}: {{Score}}</li>
{{/with}}
{{/each}}
让你的助手简单地返回Collection.find()
在您的情况下,您的键引用了一个对象数组,因此您必须使用迭代器,只需在引用嵌入数组键时嵌套{{#each}}
:
{{#each helper}}
{{#each data}}
<li>{{Title}}: {{Score}}</li>
{{/each}}
{{/each}}