sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur sparar man en rad indata till ett underordnat schema i ett kapslat mongooseschema?

Du kan använda en atomuppdateringsmetod som findOneAndUpdate() för ditt inlägg där du kan ange upsert alternativ. Om upsert är sant och inget dokument matchar frågekriterierna, findOneAndUpdate() infogar ett enda dokument. Det är där du också kan använda den infödda$ tryck operatör för att skicka den nya frågan och svaren till frågeuppsättningen, istället för att använda en loop när du kan låta mongo göra allt arbete på servern.

Följande exempel visar hur du kan omfaktorisera din kod:

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;

I ovanstående, fälten och värdena för både och parametrar skapas om parametern innehåller uppdateringsoperatoruttryck. Uppdateringen skapar ett basdokument från likhetssatserna i parametern och tillämpar sedan uppdateringsuttrycken från parameter.



  1. Kan denna teknik stapla skala?

  2. Spara en array-egenskap på ett Mongoose-schema

  3. Template Render skickar inte pymongo aggregerad variabel till mallen

  4. Ansluter till MongoDB Atlas från firebase-funktioner