U kunt een atomaire updatemethode gebruiken zoals findOneAndUpdate()
voor je bericht waar je de upsert
. kunt specificeren keuze. Als upsert
waar is en geen enkel document voldoet aan de zoekcriteria, findOneAndUpdate()
voegt een enkel document in. Hier kun je ook de native$push
operator om de nieuwe vraag en antwoorden naar de vragenreeks te pushen, in plaats van een lus te gebruiken wanneer u Mongo al het werk op de server kunt laten doen.
Het volgende voorbeeld laat zien hoe u uw code kunt refactoren:
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;
In het bovenstaande zijn de velden en waarden van zowel de <query>
en <update>
parameters worden gemaakt als de <update>
parameter bevat update-operatorexpressies. De update creëert een basisdocument van de gelijkheidsclausules in de <query>
parameter en past vervolgens de update-expressies toe van de <update>
parameter.