MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

nie można zaktualizować dokumentu przez 'findById' i save() z obietnicą

Rozważałby podzielenie operacji na łatwe do opanowania kawałki. W takim przypadku chcesz zaktualizować showTakenSeats pole z danymi pozycji biletu z nowego zamówienia.

Po pierwsze, korzystając z asynchronicznego oczekiwania z trasą ekspresową, musisz zapisać zamówienie i uzyskać utworzony dokument zamówienia. Utwórz dokument z nowo zajętymi miejscami, a następnie zaktualizuj dokument pokazu za pomocą findByIdAndUpdate metoda.

Poniższy przykład opisuje powyższe:

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. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. mongodb przybliżone dopasowanie ciągów

  2. Agregacja Mongodb:$reduce nie działa zgodnie z oczekiwaniami

  3. Sterownik PHP72 MongoDB z Homebrew na OSX

  4. Zagregowane zapytanie z warunkiem where

  5. Make $elemMatch (projekcja) zwraca wszystkie obiekty spełniające kryteria