循环遍历Mongodb对象以获取Meteorjs中的值

时间:2013-11-26 12:17:32

标签: mongodb meteor handlebars.js meteorite

我第一次使用Meteorjs和MongoDB。我正在研究Q& A应用程序。我有一个使用Meteor数据库调用的对象列表。我想对列表进行循环操作,并希望将其中一个属性拆分为长度50,然后将这些拆分对象的列表发送到数据库。我有这个是

Template.questions.questions = function () {
questions= Meteor.questions.find({topic_id: Session.get("currentTopicId")});
return questions
}
 问题列表中的每个问题对象都有一个属性question_text。使用循环我想将此属性拆分为50的长度,然后想要将其推送到空列表并返回该列表。喜欢
questions_list=[]
for(i=0;i<questions.length;i++){
    question=questions[i].question_text[0:50]   // python syntex to get first 50 char of a string
    questions_list.push(question
}
return questions_list

和我的HTML就像

<tbody>
            {{#each questions}}
            <tr>
                <td class="span2" style="overflow:hidden;width:50px">
                    <a href="#" data-id="{{_id}}" class="edit"> {{question_text}}</a>
                </td>

            </tr>

            {{/each}}

            </tbody>

建议我们如何在meteorjs中解决这个问题。我的问题是,当我尝试遍历此问题列表时,有许多属性,如收集,结果,查询。在这里,我无法迭代这个对象列表。

以同样的方式我怎么能得到meteorjs抛出的错误信息

2 个答案:

答案 0 :(得分:4)

这将为您提供与查询匹配的所有问题的缩短文本列表:

var questions = Questions.find({...}).map(function(question) {
    return question.text.substr(0,50);
});

您可以直接在帮助程序中使用它:

Template.questions.questions = function () {
    return Questions.find({...}).map(function(question) {
        return question.text.substr(0,50);
    });
};


顺便说一下,Questions.find({...})不返回问题的列表,而是一个可用于有效处理查询数据的游标对象(如map上面的方法)。要获取原始数组,您需要在该游标上使用fetchQuestions.find({...}).fetch()

答案 1 :(得分:2)

如果您只是显示数据,则可以创建一个把手帮助器:

Template.questions.helpers({
  first50: function(question) {
    return question.text.substr(0,50);
  }
});

然后添加助手:

Template.questions.questions = function() {
  return Questions.find({...});
};

然后在你的模板中你可以做到:

<tbody>
  {{#each questions}}
    <tr>
      <td class="span2" style="overflow:hidden;width:50px">
        <a href="#" data-id="{{_id}}" class="edit"> {{first50 question_text}}</a>
      </td>
    </tr>
  {{/each}}
</tbody>