Você pode usar um método de atualização atômica como
findOneAndUpdate()
para sua postagem onde você pode especificar o upsert
opção. Se upsert
é verdadeiro e nenhum documento corresponde aos critérios de consulta, findOneAndUpdate()
insere um único documento. Aqui é onde você também pode usar o nativo$ empurrar
operador para enviar a nova pergunta e respostas para a matriz de perguntas, em vez de usar um loop quando você pode deixar o mongo fazer todo o trabalho no servidor. O exemplo a seguir mostra como você pode refatorar seu código:
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;
Acima, os campos e valores de
e
parâmetros são criados se o
O parâmetro contém expressões do operador de atualização. A atualização cria um documento base das cláusulas de igualdade no
parâmetro e, em seguida, aplica as expressões de atualização do
parâmetro.