【问题标题】:Mongo document to arrayMongo文档到数组
【发布时间】:2014-11-27 09:14:30
【问题描述】:

我在 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();

或整个集合(没有“this”),它不起作用,我在 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>

【问题讨论】:

  • 你想通过将它转换成数组来达到什么目的?分享你的 html 代码,以便我们清楚地了解你在做什么..
  • 我正在尝试迭代存储在 mongo 文档中的数组中的值。例如,我想将它们输出为单独的 div。这是一个简单的任务列表。任务迭代得很好,但我正在尝试输出分配给特定任务的子任务。子任务作为字符串数组存储在与其“父任务”相同的文档中。模板:
  • subelement 是一个数组,对吧?在您的 html 中,您可以使用 {{#each subelement}} {{this}} {{/each}}`。您不必为此创建另一个助手。

标签: javascript mongodb meteor toarray


【解决方案1】:

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

如文档所述,如果您想要find() 调用的结果,您需要调用.fetch() - 了解更多信息,请访问http://docs.meteor.com/#/full/mongo_cursor

【讨论】:

    【解决方案2】:

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

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

    也许您想要一个已经存储在对象中的数组作为某个键的值。通过记录对象,您可以找到此键/属性并通过点符号访问它:sublen.&lt;property-name&gt;

    去这里看看js Object上面有哪些方法:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object

    【讨论】:

    • 感谢您的回答,我之前尝试了 .keys() 和 .,但没有任何效果。
    【解决方案3】:

    我假设您有一个 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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-02
      • 2019-08-02
      • 2015-03-13
      • 2021-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多