MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Como salvar uma matriz de entradas em um esquema filho em um esquema de mangusto aninhado?


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.