操作を管理可能なチャンクに分割することを検討します。この場合、 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);
}
});