sql >> Databáze >  >> NoSQL >> MongoDB

Jak uložit pole vstupů do podřízeného schématu ve vnořeném mongoose schématu?

Můžete použít metodu atomické aktualizace, jako je findOneAndUpdate() pro váš příspěvek, kde můžete zadat upsert volba. Pokud upsert je true a kritériím dotazu neodpovídá žádný dokument, findOneAndUpdate() vloží jeden dokument. Zde můžete také použít nativní$ push operátora, který vloží novou otázku a odpovědi do pole otázek místo použití smyčky, když můžete nechat mongo dělat veškerou práci na serveru.

Následující příklad ukazuje, jak můžete refaktorovat svůj kód:

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;

Ve výše uvedených polích a hodnotách a parametry se vytvoří, pokud parametr obsahuje výrazy aktualizačního operátoru. Aktualizace vytvoří základní dokument z klauzulí o rovnosti v a poté použije aktualizační výrazy z parametr.



  1. Node.js poslouchá změnu MongoDB

  2. Jak aktualizovat položku z pole vnořeného do pole

  3. Může MongoDB ukládat a manipulovat s řetězci UTF-8 s kódovými body mimo základní vícejazyčnou rovinu?

  4. Mongoose.js:Vyhledejte uživatele podle hodnoty LIKE uživatelského jména