sql >> Database >  >> NoSQL >> MongoDB

Hoe kan ik een reeks invoer opslaan in een onderliggend schema in een genest mangoestschema?

U kunt een atomaire updatemethode gebruiken zoals findOneAndUpdate() voor je bericht waar je de upsert . kunt specificeren keuze. Als upsert waar is en geen enkel document voldoet aan de zoekcriteria, findOneAndUpdate() voegt een enkel document in. Hier kun je ook de native$push operator om de nieuwe vraag en antwoorden naar de vragenreeks te pushen, in plaats van een lus te gebruiken wanneer u Mongo al het werk op de server kunt laten doen.

Het volgende voorbeeld laat zien hoe u uw code kunt refactoren:

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;

In het bovenstaande zijn de velden en waarden van zowel de <query> en <update> parameters worden gemaakt als de <update> parameter bevat update-operatorexpressies. De update creëert een basisdocument van de gelijkheidsclausules in de <query> parameter en past vervolgens de update-expressies toe van de <update> parameter.



  1. MongoDB $dayOfYear

  2. Async gebruiken met MongoDb om incassodocumenten in volgorde in te vullen

  3. Afronding op 2 decimalen met behulp van het MongoDB-aggregatieraamwerk

  4. Waarom staat er een onderstrepingsteken voor de MongoDb-document-ID?