跳过和限制选项 Return Meteor/MongoDB 中为空

Skip and Limit Options Return Null in Meteor/MongoDB

我有一个名为 "general_roasts" 的集合,我正在尝试获取一个随机文档并 return 它。这是 db.general_roasts.find() 的输出:

meteor:PRIMARY> db.general_roasts.find()
{ "_id" : ObjectId("594b389caad4dc3ae16c5f09"), "text" : "roast 11", "contributor" : "" }
{ "_id" : ObjectId("594b38a1aad4dc3ae16c5f0a"), "text" : "roast 12", "contributor" : "" }
{ "_id" : ObjectId("594b38a5aad4dc3ae16c5f0b"), "text" : "roast 13", "contributor" : "" }
{ "_id" : ObjectId("594b38a7aad4dc3ae16c5f0c"), "text" : "roast 14", "contributor" : "" }
{ "_id" : ObjectId("594b38aaaad4dc3ae16c5f0d"), "text" : "roast 15", "contributor" : "" }

这是代码:

import { Mongo } from 'meteor/mongo';
import { Meteor } from 'meteor/meteor';

const Categories = new Mongo.Collection('categories');
const GeneralRoasts = new Mongo.Collection('general_roasts');
console.log("GENERAL ROASTS: " + GeneralRoasts.find().fetch());

Meteor.methods({
  'Roasts.random': ({category}) => {
    console.log("received random roast request: " + category);
    if (category == 'general')
    {
      let count = GeneralRoasts.find().count();
      let index = Math.floor(Math.random() * count);
      console.log("count: " + count + " index: " + index);
      //var roast = GeneralRoasts.find({skip: index}).fetch();
      var roast = GeneralRoasts.find({}, {skip: index, limit: 1});
      console.log("returning roast: " + roast.text);
      return roast;
    }
  }
});

Meteor.publish('general_roasts', ()=> {
  console.log("published");
  return GeneralRoasts.find();
});
Meteor.publish('categories', () => {
  return Categories.find();
});

export default GeneralRoasts;

"Roasts.random" 的记录输出是:

received random roast request: general
I20170621-22:02:32.059(-7)? count: 5 index: 4
I20170621-22:02:32.060(-7)? returning roast: undefined

有谁知道为什么 returned 而 "roast 14" 应该 returned?

提前致谢!

正如 Neil Lunn 所说,您应该收到 'roast 15' 而不是 'roast 14'。

{skip: 0, limit: 1} 是 'roast 11',所以 {skip: 4, limit: 1} 将是 'roast 15'

你得到未定义的,因为你没有获取它。

改变

var roast = GeneralRoasts.find({}, {skip: index, limit: 1});

var roast = GeneralRoasts.find({}, {skip: index, limit: 1}).fetch();

事实证明 find() 只是 returns 一个游标,所以我不得不使用 GeneralRoasts.find({}, {skip: index, limit: 1}).fetch();

这解决了我的问题!