Możesz użyć atomowej metody aktualizacji, takiej jak findOneAndUpdate()
dla swojego posta, w którym możesz określić upsert
opcja. Jeśli upsert
ma wartość prawda i żaden dokument nie spełnia kryteriów zapytania, findOneAndUpdate()
wstawia pojedynczy dokument. Tutaj możesz również użyć natywnego$ wciśnij
operatora, aby przekazać nowe pytanie i odpowiedzi do tablicy pytań, zamiast używać pętli, gdy możesz pozwolić mongo wykonać całą pracę na serwerze.
Poniższy przykład pokazuje, jak możesz zmienić 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;
W powyższym, pola i wartości obu
i
parametry są tworzone, jeśli
parametr zawiera wyrażenia operatora aktualizacji. Aktualizacja tworzy dokument bazowy z klauzul równości w
parametr, a następnie stosuje wyrażenia aktualizacji z
parametr.