Anda dapat menggunakan metode pembaruan atom seperti findOneAndUpdate()
untuk posting Anda di mana Anda dapat menentukan upsert
pilihan. Jika upsert
benar dan tidak ada dokumen yang cocok dengan kriteria kueri, findOneAndUpdate()
menyisipkan satu dokumen. Di situlah Anda juga dapat menggunakan$push
operator untuk mendorong pertanyaan dan jawaban baru ke larik pertanyaan, daripada menggunakan loop ketika Anda dapat membiarkan mongo melakukan semua pekerjaan di server.
Contoh berikut menunjukkan bagaimana Anda dapat memfaktorkan ulang kode Anda:
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;
Di atas, bidang dan nilai dari kedua <query>
dan <update>
parameter dibuat jika <update>
parameter berisi pembaruan ekspresi operator. Pembaruan membuat dokumen dasar dari klausa kesetaraan di <query>
parameter, dan kemudian menerapkan ekspresi pembaruan dari <update>
parameter.