sql >> データベース >  >> NoSQL >> MongoDB

'findById'およびsave()を介してドキュメントを更新することはできません

    操作を管理可能なチャンクに分割することを検討します。この場合、 showTakenSeatsを更新する必要があります 新しい注文のチケット位置データを含むフィールド。

    まず、エクスプレスルートでasync awaitを使用して、注文を保存し、作成された注文ドキュメントを取得する必要があります。新しいシートを使用してドキュメントを作成し、 findByIdAndUpdate メソッド。

    次の例では、上記について説明します。

    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-シャーディング時に_idはグローバルに一意である必要があります

    2. NodesJS + Passport + RedisStoreのシリアル化と逆シリアル化を実装しますか?

    3. mongoは、最後に空/欠落フィールドがあるドキュメントを昇順で返すことができますか?

    4. トレーニングに失敗しました-AWS機械学習