如何在Mongoose中编写一个获取所有文档的静态方法



我是Mongoose的新手。我为一个名为"questionSchema"的Mongoose模式编写了一个statics方法和一个实例方法,并将其导出为:

var questionSchema = new Schema({
...
})
questionSchema.methods.createQuestion = function(){
return this.save(function(err){
if(err){ 
return  err
};
return 'Saved the question';
});
};
questionSchema.statics.getAllQ = function(){
return this.find({}, function(err, res){
if(err){ 
return  err
};
return res;
});
}
module.exports = mongoose.model('Question', questionSchema)

然后,在我的Node/Express服务器中的一个路由中,我将其作为一个模型导入,并尝试调用静态方法,该方法应该返回Question模型下的所有文档:

const Question = require('../models/question.js');
...
router.post('/qcrud/submit', (req, res) => {
let reqBody = req.body;
var newQuestion = new Question({reqBody});    
newQuestion.createQuestion();
})
router.get('/qcrud/getAll',(req, res) => {
let qArr = Question.getAllQ()
res.send(qArr);
});

但是,它返回的是一个Query对象,而不是我所期望的数组。我环顾四周,在MDN上看到

如果您没有指定回调,那么API将返回一个变量类型为Query。'

我确实指定了回调,但仍然得到了Query对象。首先,我使用静态方法和实例方法对吗?文件保存了吗?如何访问保存的数组文档?

如果使用Node 8.x,则可以使用异步/等待

这样你的代码看起来会更同步:

questionSchema.statics.getAllQ = async () => {
return await this.find({});
}
router.get('/qcrud/getAll',async (req, res) => {
let qArr = await Question.getAllQ();
res.send(qArr);
});

您可以在这里找到一篇非常好的文章,解释如何将Mongoose与async/await一起使用。

最新更新