0
我剛剛開了一個nodeJS
代碼試圖利用mongoose-random我mongoose
收集一些隨機的文件,但是當我打電話給findRandom()
方法的任何原因,它響應的500
。貓鼬隨機響應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;
閱讀其他職位here作爲解決方案的目的使用syncRandom()
方法,但這對我不起作用。無論是使用random()
任何幫助嗎?謝謝你的建議。
UPDATE
挖掘更多的進入問題,我已經realiced我的模型TestSchema
,它應該包含mongoose-random
方法被overrided,所以我只有我的靜態方法。
您的問題沒有貓鼬。在'getRandom'的承諾範圍內的'this'不是指模型,而是指'new Promise'中的函數。在這種情況下,'findRandom'是未定義的。 – cdbajorin
噢,抱歉,這是我的一個錯誤,當我編輯的最後一次。 – DevStarlight
如果您的MongoDB服務器至少是3.2,你可能最好使用內置的['$ sample'(https://docs.mongodb.com/manual/reference/operator/aggregation/sample/#pipe ._S_sample)管道運營商。 – JohnnyHK