【问题标题】:Meteor - Cannot Access All Read OperationsMeteor - 无法访问所有读取操作
【发布时间】:2014-11-30 05:38:48
【问题描述】:

我是 Meteor 的新手。我一直在这个问题上停留了一段时间。我可以成功地将项目添加到集合中并在控制台中全面查看它们。但是,我无法访问 .js 文件中的所有读取操作。

也就是说,我可以将 .find() 和 .findOne() 与空参数一起使用。但是当我尝试添加 .sort 或参数时,我收到一个错误,告诉我对象未定义。

自动发布已打开,所以我不确定是什么问题。这些调用是直接在客户端进行的。

这会返回一些东西--

Template.showcards.events({
  "click .play-card": function () {
    alert(Rounds.find());
   }
})

这没有任何回报--

Template.showcards.events({
  "click .play-card": function () {
    alert(Rounds.find().sort({player1: -1}));
   }
})

抱歉新手问题。提前致谢。

【问题讨论】:

    标签: mongodb meteor


    【解决方案1】:

    Meteor 的集合 API 的工作方式与 mongo shell 的 API 有点不同,这对于新用户来说是可以理解的。您需要这样做:

    Template.showcards.events({
      'click .play-card': function() {
        var sortedCards = Rounds.find({}, {sort: {player1: -1}}).fetch();
        console.log(sortedCards);
      }
    });
    

    请参阅this 了解更多详情。另请注意,记录游标(查找的结果)可能不是您想要的。如果你想查看文档的内容,你需要fetch他们。

    【讨论】:

    • 大卫——非常感谢。这非常有效。我在文档中阅读了有关游标的内容,但一定错过了#fetch 部分。参考资料非常有帮助。谢谢。
    【解决方案2】:

    Rounds.find().sort({player1: -1}) 返回一个游标,因此您需要这样做:

    Rounds.find().sort({player1: -1}).fetch();
    

    请注意,这将返回一个 Array 的文档对象。所以你会做更多这样的事情:

    docs = Rounds.find().sort({player1: -1}).fetch();
    alert(docs[0]);
    

    【讨论】:

    • 嗨,史蒂夫——非常感谢。这真的很有帮助——特别是指出返回的是一个数组,而不是一个项目。但是,上面的语法对我不起作用。我无法使用#find 然后#sort 让它工作。但是我能够使用 #find 和 sort 作为第二个参数来获得它(写在上面的答案中)。但真正的诀窍是我没有注意到#fetch。谢谢你教我!
    • 对不起语法。编写大量 Ruby... 正如您所发现的,MongoDB 友好的方式肯定是使用 selector, options 表单。另外值得注意的是,find().fetch()[0] 模式非常常用,以至于 Meteor 提供了findOne() 来节省击键。
    猜你喜欢
    • 1970-01-01
    • 2015-02-02
    • 2014-11-10
    • 2021-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-02
    • 2017-07-23
    相关资源
    最近更新 更多