Sẽ xem xét chia nhỏ hoạt động thành các phần có thể quản lý được. Trong trường hợp này, bạn muốn cập nhật showTakenSeats
trường với dữ liệu vị trí vé từ đơn đặt hàng mới.
Đầu tiên, sử dụng async await với tuyến đường cao tốc của bạn, bạn cần lưu đơn đặt hàng và lấy tài liệu đơn đặt hàng đã tạo. Tạo tài liệu với ghế mới và sau đó cập nhật tài liệu chương trình bằng cách sử dụng findByIdAndUpdate
phương pháp.
Ví dụ sau mô tả những điều trên:
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);
}
});