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

nelze aktualizovat dokument pomocí 'findById' a save() s příslibem

Zvažoval bych rozdělení operace na zvládnutelné kousky. V tomto případě byste chtěli aktualizovat showTakenSeats pole s údaji o pozicích tiketu z nové objednávky.

Za prvé, pomocí asynchronního čekání s vaší expresní cestou musíte uložit objednávku a získat vytvořený dokument objednávky. Vytvořte dokument s nově získanými místy a poté aktualizujte dokument show pomocí findByIdAndUpdate metoda.

Výše uvedené popisuje následující příklad:

const express = require('express');
const router = express.Router();

const Order = require('../models/order.js');
const Show = require('../models/show.js');

router.post('/', async (req, res, next) => {
    try {
        /* create a new Order */
        const order = new Order(req.body);
        const newOrder = await order.save();

        /* create a document to use in the update with the following data structure:
            {
                'showTakenSeats.6-0': 5b53735ef7ce3d2cd4bbfee7,
                'showTakenSeats.6-1': 5b53735ef7ce3d2cd4bbfee7,
                'showTakenSeats.6-2': 5b53735ef7ce3d2cd4bbfee7 
            }

            Use the native reduce method on the array to create this 
        */
        const updatedSeats = newOrder.ticketPositions.reduce((acc, position) => {
            acc[`showTakenSeats.${position.join('-')}`] = newOrder._id;
            return acc;
        }, {});

        /* update the show document's embedded showTakenSeats 
           with the new properties from above 
        */
        const updateShow = await Show.findByIdAndUpdate(req.body._ShowId,
            { '$set': updatedSeats },
            { 'new': true }
        );

        res.json(updateShow);

    } catch (e) {
        /* this will eventually be handled by your error handling middleware */
        next(e);
    }
});


  1. MongoDB log 10 $

  2. MongoDB – Oprávnění odepřeno pro socket:/tmp/mongodb-27017.sock

  3. mongoengine - Dotaz na ListField EmbeddedDocumentField

  4. snížit hodnotu v kolekci až na 0