sql >> Database teknologi >  >> NoSQL >> MongoDB

Hvordan gemmer man en række input til et underordnet skema i et indlejret mongoose-skema?

Du kan bruge en atomær opdateringsmetode som findOneAndUpdate() for dit indlæg, hvor du kan angive upsert mulighed. Hvis upsert er sand, og intet dokument matcher forespørgselskriterierne, findOneAndUpdate() indsætter et enkelt dokument. Det er her, du også kan bruge den oprindelige$ tryk operatør til at skubbe det nye spørgsmål og svarene til spørgsmålsarrayet i stedet for at bruge en loop, når du kan lade mongo udføre alt arbejdet på serveren.

Følgende eksempel viser, hvordan du kan refaktorisere din kode:

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 ovenstående er felterne og værdierne for både og parametre oprettes, hvis parameter indeholder opdateringsoperatørudtryk. Opdateringen opretter et basisdokument fra lighedssætningerne i parameter, og anvender derefter opdateringsudtrykkene fra parameter.



  1. Selleri skaber en ny forbindelse til hver opgave

  2. Bedste Session Storage Middleware til Express + MongoDB

  3. Behøver at gøre .toArray() for at få output af mongodb .find() på nøglenavn ikke værdi

  4. Hent d3.js-array fra en url