Meteor MongoDB查找/获取问题

时间:2014-03-01 20:22:36

标签: mongodb meteor

Meteor.publish('polls', function () { 
    return Polls.find({}); 
});

Meteor.publish('recentPolls', function() {
    return Polls.find({}, {sort: {date: -1}, limit: 10}).fetch();
});

所以这是在文档的/server/server.js文件中,它说fetch()方法返回数组中的匹配文档。但是,在客户端使用订阅功能就像这样

Template.recentPolls.polls = function() {
    console.log(Meteor.subscribe('recentPolls'));
    return Meteor.subscribe('recentPolls');
}

由于某些奇怪的原因,这将返回以下对象(不是数组)而是一个对象

Object {stop: function, ready: function}

这是我在控制台中遇到的错误。

Exception from sub 5NozeQwianv2DL2eo Error: Publish function returned an array of non-Cursors

1 个答案:

答案 0 :(得分:3)

fetch返回一个对象数组,这不是从发布函数返回的合法值。

发布函数只能返回游标,游标数组或虚假值。要解决您的错误,只需删除fetch

即可
return Polls.find({}, {sort: {date: -1}, limit: 10});

在客户端,想要在模板中订阅。您希望订阅一次(通常在名为client/subscriptions.js的文件中)或路由内部(请参阅iron-router documentation)。

忽略subscribe返回的内容。调用subscribe只允许服务器将数据同步到客户端。调用的结果不是数据本身。

要从模板访问您的数据,只需使用另一个查找内容:

Template.recentPolls.polls = function() {
  Polls.find({}, {sort: {date: -1}});
}