跳过和限制选项在Meteor / MongoDB中返回Null

时间:2017-06-22 05:27:47

标签: mongodb meteor mongodb-query meteor-react

我有一个名为“general_roasts”的集合,我正在尝试获取随机文档并将其返回。这是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

有人知道为什么应该返回“烤14”时返回null吗?

提前致谢!

2 个答案:

答案 0 :(得分:0)

正如Neil Lunn所说,你应该接受15' roast 15'而不是烤14'。

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

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

更改

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

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

答案 1 :(得分:0)

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

这解决了我的问题!