MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Wie speichere ich ein Array von Eingaben in einem untergeordneten Schema in einem verschachtelten Mungo-Schema?

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.