[英]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.