Akan mempertimbangkan untuk memecah operasi menjadi potongan-potongan yang dapat dikelola. Dalam hal ini Anda ingin memperbarui showTakenSeats
field dengan data posisi tiket dari orde baru.
Pertama, menggunakan async menunggu dengan rute ekspres Anda, Anda perlu menyimpan pesanan dan mendapatkan dokumen pesanan yang dibuat. Buat dokumen dengan kursi yang baru diambil lalu perbarui dokumen pertunjukan menggunakan findByIdAndUpdate
metode.
Contoh berikut menjelaskan hal di atas:
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);
}
});