Du kan bruge en atomær opdateringsmetode som findOneAndUpdate()
for dit indlæg, hvor du kan angive upsert mulighed. Hvis upsert er sand, og intet dokument matcher forespørgselskriterierne, findOneAndUpdate()
indsætter et enkelt dokument. Det er her, du også kan bruge den oprindelige$ tryk
operatør til at skubbe det nye spørgsmål og svarene til spørgsmålsarrayet i stedet for at bruge en loop, når du kan lade mongo udføre alt arbejdet på serveren.
Følgende eksempel viser, hvordan du kan refaktorisere din kode:
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;
I ovenstående er felterne og værdierne for både og parametre oprettes, hvis parameter indeholder opdateringsoperatørudtryk. Opdateringen opretter et basisdokument fra lighedssætningerne i parameter, og anvender derefter opdateringsudtrykkene fra parameter.