sql >> Database >  >> NoSQL >> MongoDB

kan een document niet updaten via 'findById' en save() with promise

Zou overwegen de operatie op te splitsen in hanteerbare brokken. In dit geval zou je de showTakenSeats . willen updaten veld met de ticketpositiegegevens van de nieuwe bestelling.

Ten eerste, als u async wait met uw expresroute gebruikt, moet u de bestelling opslaan en het gemaakte besteldocument ophalen. Maak een document met de nieuw ingenomen stoelen en werk vervolgens het showdocument bij met findByIdAndUpdate methode.

Het volgende voorbeeld beschrijft het bovenstaande:

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. Zoeken en wijzigen met MongoDB C#

  2. Controleer of MongoDB upsert een invoeging of een update heeft uitgevoerd

  3. MongoDB:afwegingen tussen het laten vallen van een collectie versus het verwijderen van al zijn documenten

  4. Mislukte globale initialisatie:BadValue-logpad vereist een absoluut bestandspad met Windows-services