检索MongoDB中对象内部的文档并在Meteor上显示

时间:2015-12-15 21:07:01

标签: mongodb meteor

假设我想创建一个用户在其帐户中玩过的所有游戏的分数列表。每个用户在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": {}});

}

以上,如果它能正常工作,就会给出游戏的标题。但我在这里做错了。我有一种感觉,这太容易了,我错过了一件让我无法正确显示数据的事情。

1 个答案:

答案 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}}