簡體   English   中英

貓鼬隨機反應500

[英]mongoose-random response 500

我剛剛打開了nodeJS代碼,試圖使用nodeJS -random從我的mongoose集合中獲取隨機文檔,但是由於任何原因,當我調用findRandom()方法時,它都會響應500

test.js

在下面我粘貼我的代碼:

var mongoose     = require('mongoose');
var random       = require('mongoose-random');
var Promise      = require('bluebird');

mongoose.Promise = Promise;

var TestSchema = new mongoose.Schema({
  _id: {
    type: Number,
    default: 0
  }
});

TestSchema.plugin(random, {path: 'r'});

TestSchema.statics = {
  start: function (value) {
    var array = [], i = 1;
    for (i; i < value; i += 1) {
      array.push({ _id: i });
    }
    return this.create(array);
  },
  getRandom: function () {
    return new Promise(function(resolve, reject) {
      TestSchema.findRandom().limit(10).exec(function (err, songs) {
        if (err) {
          reject(err);
        } else { 
          resolve(songs);
        }
      });
    });
  }
};

module.exports = mongoose.model('TestSchema', TestSchema);

routes.js

var router        = require('express').Router();
var path          = require('path');
var Promise       = require('bluebird');
var request       = require('request');

var test   = require('./models/test.js');

router.get('/fill', function (req, res) {
  test.start(40)
    .then(function () {
      res.status(200).send('You can start your hack :)');
    })
    .catch(function (error) {
      res.status(400).send(error);
    });
});

router.get('/vote', function (req, res) {
  test.getRandom()
    .then(function (data) {
      res.status(200).send(data);
    })
    .catch(function (error) {
      res.status(400).send(error);
    }); 
});

module.exports = router;

在這里閱讀其他文章作為使用syncRandom()方法的解決方案,但這對我不起作用。 都不使用random()

有什么幫助嗎? 感謝您的建議。

更新

深入研究這個問題,我認識到我的模型TestSchema ,該模型應該包含mongoose-random方法,因此我只有靜態方法。

不要為新對象設置statics ,只需向其添加方法:

TestSchema.statics.start = function (value) {
    var array = [], i = 1;
    for (i; i < value; i += 1) {
      array.push({ _id: i });
    }
    return this.create(array);
  };

TestSchema.statics.getRandom = function () {
    return new Promise(function(resolve, reject) {
      TestSchema.findRandom().limit(10).exec(function (err, songs) {
        if (err) {
          reject(err);
        } else { 
          resolve(songs);
        }
      });
    });
  };

但是,如果您的MongoDB服務器至少為3.2,則最好使用內置的$sample管道運算符而不是使用插件來選擇隨機文檔。

test.aggregate([{$sample: 10}], callback);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM