Mongo文档到数组

时间:2014-11-27 09:14:31

标签: javascript mongodb meteor toarray

我在Meteor中从MongoDB获取了一份文件:

Template.SubTasks.helpers ({
   subelement: function (){


      var sublen = TodosCol.find(this);
      // var sublen2 = ????

      return sublen2;
  }


});

效果很好,sublen作为对象返回。但是当我试图将它转换为数组时(例如:

var sublen2 = sublen.toArray();

var sublen = TodosCol.find(this).toArray();

或整个系列(没有'这个'),它没有工作,我得到一个" undefined不是一个功能" Chrome控制台中的错误。

我也试过

var sublen2 = sublen.propertyName;

因为它是一个对象,没有运气。

我做错了什么?

由于

编辑:

我试图在mongo文档中迭代存储在数组中的值。我想输出它们,例如作为单独的div输出。这是一个简单的任务列表。任务迭代很好,但我试图输出分配给特定任务的子任务。子任务存储在与其父任务相同的文档中。作为一个字符串数组。

模板:

<template name='SubTasks'>
    <div class='sub-output {{_id}}'>
        {{#each subelement}}
            <div class='sub-task {{_id}}'>
                {{subtask}}
             </div>
        {{/each}}
    </div>
</template>

3 个答案:

答案 0 :(得分:2)

如果TodosCol是一个集合,那么它的.find()方法会返回一个Cursor - http://docs.meteor.com/#/basic/Mongo-Collection-find。光标可用于使用{{each}}高效且反应性地迭代结果。

正如文档所述,如果您想要find()来电的结果,则需要致电.fetch() - 在http://docs.meteor.com/#/full/mongo_cursor了解详情

答案 1 :(得分:0)

问题是javascript对象没有toArray()方法。没有更多细节,我无法提供很多帮助。也就是说,您希望阵列包含什么?对象包含键值对,也称为属性。您应该在第一次接收对象时将对象记录到控制台,并查看要组成阵列的对象的哪些部分。

例如,如果您想在对象上使用键/属性数组,则可以尝试sublen.keys(),它返回对象上每个属性(键)的字符串名称数组。

也许你想要一个已经存储在对象中的数组作为某个键的值。通过记录对象,您可以找到此密钥/属性并通过点表示法访问它:sublen.<property-name>

到这里查看js Object对它有哪些方法:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object

答案 2 :(得分:0)

我假设您有一个MongoDB集合,并且在该集合中有一个名为subtasks的密钥,它有一个数组。

Template.tasks.helpers({
  tasks:function(){
    return Tasks.find({}).fetch();
  }
});

然后在您的HTML模板中。

<template name="tasks">
  {{#each tasks}}
    <div id ="{{_id}}">
        <p>{{title}}</p>
        <ul>
            {{#each subtasks}}
                <li>
                    <p>{{this}}</p> 
                </li>
            {{/each}}
        </ul>
    </div>
  {{/each}}
</template>