Du kan använda en atomuppdateringsmetod som findOneAndUpdate()
för ditt inlägg där du kan ange upsert
alternativ. Om upsert
är sant och inget dokument matchar frågekriterierna, findOneAndUpdate()
infogar ett enda dokument. Det är där du också kan använda den infödda$ tryck
operatör för att skicka den nya frågan och svaren till frågeuppsättningen, istället för att använda en loop när du kan låta mongo göra allt arbete på servern.
Följande exempel visar hur du kan omfaktorisera din kod:
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 ovanstående, fälten och värdena för både
och
parametrar skapas om
parametern innehåller uppdateringsoperatoruttryck. Uppdateringen skapar ett basdokument från likhetssatserna i
parametern och tillämpar sedan uppdateringsuttrycken från
parameter.