Sie können eine atomare Aktualisierungsmethode wie findOneAndUpdate()
für Ihren Beitrag, wo Sie den Upsert
angeben können Möglichkeit. Wenn upsert
wahr ist und kein Dokument den Abfragekriterien entspricht, findOneAndUpdate()
fügt ein einzelnes Dokument ein. Hier können Sie auch den nativen $ verwenden drücken
-Operator, um die neue Frage und die Antworten in das Frage-Array zu schieben, anstatt eine Schleife zu verwenden, wenn Sie Mongo die ganze Arbeit auf dem Server erledigen lassen können.
Das folgende Beispiel zeigt, wie Sie Ihren Code umgestalten können:
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;
Oben sind die Felder und Werte von
und
Parameter werden erstellt, wenn
-Parameter enthält Aktualisierungsoperatorausdrücke. Das Update erstellt ein Basisdokument aus den Gleichheitsklauseln in
-Parameter und wendet dann die Aktualisierungsausdrücke aus
an Parameter.