【问题标题】:Struggling with .find() vs. .findOne() in my Meteor app在我的 Meteor 应用程序中与 .find() 与 .findOne() 斗争
【发布时间】:2014-02-09 23:08:59
【问题描述】:

我意识到这可能与其他帖子非常接近,但我就是无法记住这一点! :( 在尝试了解如何使用 .find() 时我需要一些帮助,还是应该使用 .findOne()(很困惑) 我的收藏。

目标: 我想从People 集合中取出所有文档,然后为每个文档创建一个新的<option>,其中.name 用于文本,集合._id 是值。


这里有一些代码:

来自 Mongo 的集合结果

db.people.find()
{ "_id" : "1", "name" : "John" }
{ "_id" : "2", "name" : "Mike" }
{ "_id" : "3", "name" : "George" }
{ "_id" : "4", "name" : "Jane" }

我的模板助手:

Template.view_Admin_Staff.people = function() {
  console.log( 'people : ', People.find() );
  return People.find();

};

我的模板:

            <select id="ddStaffID" name="staff">
                <option value="">-- Select One --</option>
                {{#each people}}
                    <option value="{{_id}}">{{name}}</option>
                {{/each}}
            </select>

在 Helper 中找到的我的 console.log 返回 undefined。我到底错过了什么?

【问题讨论】:

  • 当您在浏览器中打开控制台时,People.find().fetch(); 返回什么?我假设“我的模板”代码适用于 view_Admin_Staff 模板。

标签: meteor handlebars.js


【解决方案1】:

我假设你的收藏是 People = new Meteor.Collectin('people');您在 html 中的模板名称是

当您在模板助手中进行控制台登录时,您正在记录光标本身,而不是文档。您可以在 (https://www.eventedmind.com/tracks/feed-archive/how-do-client-cursors-work) 找到有关光标的更多信息。

要查看您返回的数据是否正确,您可以在游标上使用 .fetch 方法。 Fetch 将根据您的查询返回一个对象数组。在您的情况下,查询为空, fetch 方法应返回客户端数据库中可用的所有内容。

在标题中回答您的问题。 find 和 findOne 都是 Collection 对象上可用的方法。

find 返回一个游标。如果有与您的查询匹配的记录,则 findOne 返回一个对象。

【讨论】:

  • 感谢您提供视频。我想知道是否有某种截屏​​视频可以更好地解释 Meteor 文档。干杯!
【解决方案2】:

血腥-h3ll!向我们所有的 n00bs 发出警告......必须订阅您的出版物才能看到和使用您的出版物。 叹息

我最初帖子中的代码按预期工作。我只是忘记在我的客户端路由中订阅我在出版物中公开的数据。 &lt;/foreheadSlap&gt; 我是新手,怀疑我的查询技能,甚至没有在代码中进一步排除故障。感谢@Bozhao 和@DavidWeldon 的快速回复。

【讨论】:

    猜你喜欢
    • 2018-02-25
    • 1970-01-01
    • 2020-09-18
    • 2018-05-23
    • 2013-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多