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.