试图从集合中获取随机游标 - 错误:发布函数只能返回Cursor或Cursors数组

时间:2014-07-11 16:11:15

标签: javascript mongodb meteor

我正在尝试从一系列问题中发布随机问题。但是我得到一个错误说明:错误:发布功能只能返回Cursor或Cursors数组。如何在下面更改我的出版物,以便输出一个随机问题?

Publications.js

Meteor.publish('randomQuestions', function(){
var randomInRange = function(min, max) {
    var random = Math.floor(Math.random() * (max - min + 1)) + min;
    return random;
};
var q = Questions.find().fetch();
var count = q.length;
var i = randomInRange(0, count);
return q[i]
});

Router.js

this.route('gamePage', {
 path: '/games',
 waitOn: function() {
     return [
         Meteor.subscribe('randomQuestions'),
     ];
 }
});

这是客户端的一个帮助,以获取随机问题

Template.gamePage.helpers({
    displayRandomQuestion:
        function() {
            return Questions.find({});
        }
});

最后这里是使用帮助函数的html / css

<div class="questions">
    {{#each displayRandomQuestion}}
      {{> questionItem}}
    {{/each}}
</div>

1 个答案:

答案 0 :(得分:3)

您可以为单个随机问题返回光标。

Meteor.publish('randomQuestion', function (seed) {
  var q = _.sample(Questions.find().fetch());
  return Questions.find({_id: q && q._id});
});

您还应该使用随机种子进行订阅,以确保客户不共享同一个出版物。以下示例要求您meteor add random

this.route('gamePage', {
 path: '/games',
 waitOn: function() {
   return Meteor.subscribe('randomQuestion', Random.id());
 }
});

然后,您可以在帮助程序中返回该问题

Template.gamePage.question = function() {
  return Questions.findOne();
};

并将该数据作为模板的上下文提供。

<div class="question">
  {{> questionItem question}}
</div>