callback.apply在节点js中不起作用

作为我的问题的解决scheme如何将数组元素推送到一个数组,如果_id文件已经存在,并创build新的文档如果_id不存在? 我写了下面的代码。

但是这给了一个错误,说TypeError:callback.apply不是一个函数 。 我对此并不是很熟悉。 任何人都能解决这个错误?

router.post("/saveMCQAnswer", function(req, res) { Survey.findOneAndUpdate( { "_id": '0001'}, { "surveyname": 's1' }, /* <query> */ { /* <update> */ "$push": { "replies": { "_id" : 'R001', "answers": { "_id" : 'A001', "answer" : 'answer' } } } }, { "upsert": true }, /* <options> */ function(err, doc){ /* <callback> */ if(err) res.json(err); else req.flash('success_msg', 'Question saved to QBank'); res.redirect("/"); } ); }); 

您有一个额外的查询参数导致此问题。 将其移动到第一个查询对象,如下所示:

 router.post("/saveMCQAnswer", function(req, res) { Survey.findOneAndUpdate( { /* <query> */ "_id": '0001', "surveyname": 's1' // <-- fix here }, { /* <update> */ "$push": { "replies": { "_id" : 'R001', "answers": { "_id" : 'A001', "answer" : 'answer' } } } }, { "upsert": true }, /* <options> */ function(err, doc){ /* <callback> */ if(err) res.json(err); else req.flash('success_msg', 'Question saved to QBank'); res.redirect("/"); } ); });