Можете да използвате атомен метод за актуализиране като findOneAndUpdate()код>
за вашата публикация, където можете да посочите upsert
опция. Ако upsert
е вярно и нито един документ не отговаря на критериите на заявката, findOneAndUpdate()
вмъква един документ. Тук можете също да използвате родния$ натиснете
оператор, за да изпратите новия въпрос и отговорите към масива с въпроси, вместо да използвате цикъл, когато можете да оставите mongo да върши цялата работа на сървъра.
Следният пример показва как можете да преработите своя код:
var express = require('express');
var router = express.Router();
var Survey = require('../models/QBank');
router.post('/', function(req, res, next){
Survey.findOneAndUpdate(
{ "surveyname": req.body.sname }, /* <query> */
{ /* <update> */
"$push": {
"question": {
"que": req.body.que,
"ans1": req.body.ans1,
"ans2": req.body.ans2,
"ans3": req.body.ans3,
"ans4": req.body.ans4
}
}
},
{ "upsert": true }, /* <options> */
function(err, doc){ /* <callback> */
if(err) res.json(err);
else
req.flash('success_msg', 'Question saved to QBank');
res.redirect("/CreateSurvey");
}
);
});
module.exports = router;
В горното, полетата и стойностите както на
и <актуализация>код> параметрите се създават, ако
параметърът съдържа изрази на оператор за актуализиране. Актуализацията създава основен документ от клаузите за равенство в
параметър и след това прилага изразите за актуализиране от
параметър.