Můžete použít metodu atomické aktualizace, jako je findOneAndUpdate()
pro váš příspěvek, kde můžete zadat upsert
volba. Pokud upsert
je true a kritériím dotazu neodpovídá žádný dokument, findOneAndUpdate()
vloží jeden dokument. Zde můžete také použít nativní$ push
operátora, který vloží novou otázku a odpovědi do pole otázek místo použití smyčky, když můžete nechat mongo dělat veškerou práci na serveru.
Následující příklad ukazuje, jak můžete refaktorovat svůj kód:
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;
Ve výše uvedených polích a hodnotách
a
parametry se vytvoří, pokud
parametr obsahuje výrazy aktualizačního operátoru. Aktualizace vytvoří základní dokument z klauzulí o rovnosti v
a poté použije aktualizační výrazy z
parametr.