Soy nuevo en javascript y reacciono y estoy trabajando en mi primer mini proyecto, pero no puedo encontrar la manera de resolver esto.
En cada modelo de "Pedido" tengo este campo de matriz llamado "artículos de pedido" que contiene una matriz de modelos de productos y dentro de cada modelo de producto hay un campo llamado "tienda". Quiero obtener el valor de "compra" para todos los productos en orderItems y agregarlo a una nueva matriz en el modelo "Pedido"
Aquí está mi esquema:
{ orderItems: [ { name: 'abc', quantity: 1, shop: 'abc', image: '/images/cake.jpg', price: 50, _id: new ObjectId("62dbb03e90c4ca14ee3e06fd") }, { name: 'def', quantity: 1, shop: 'def', image: '/images/cake.jpg', price: 50, _id: new ObjectId("62dbb03e90c4ca14ee3e06fd") } ], sellers: [], shippingAddress: { fullName: '123', address: '123', city: '123', postalCode: '123', country: '123' }, paymentMethod: 'Paypal', itemsPrice: 50, shippingPrice: 10, totalPrice: 60, buyer: new ObjectId("62d6e48d8cd5cd2e62f6aeae"), _id: new ObjectId("62dbcf88cf1bc8fc7b85cc0b"), __v: 0 }Así que quiero obtener 'abc' y 'def' de la matriz orderItems y completarla en la matriz de vendedores. Puedo obtener los valores, pero ¿cómo los lleno en la matriz de vendedores en el mismo modelo?
este es mi codigo api
orderRouter.post( '/', isAuth, expressAsyncHandler(async(req, res) => { const newOrder = new Order({ orderItems: req.body.orderItems.map((x) => ({ ...x, product: x._id })), shippingAddress: req.body.shippingAddress, paymentMethod: req.body.paymentMethod, itemsPrice: req.body.itemsPrice, shippingPrice: req.body.shippingPrice, totalPrice: req.body.totalPrice, buyer: req.user._id, sellers: [], }); const order = await newOrder.save(); }) );Intenté usar un ciclo y luego order.sellers.push(order.orderItems[i].shop) y luego guardé nuevamente, pero no se actualiza en mi base de datos y en el almacenamiento local, el campo _id se insertó en la matriz en lugar de comprar
Paso a paso:
const orderItems separado por encima de const newOrder .const sellers usando un Set . También puede hacerlo con una matriz o incluso con un objeto, pero Set filtrará los duplicados automáticamente.Set en una matriz.Debería verse algo como esto:
const orderItems = req.body.orderItems.map((x) => ({ ...x, product: x._id })); const sellers = [...new Set(orderItems.map(x => x.shop))]; const newOrder = new Order({ orderItems, sellers: [...sellers], shippingAddress: req.body.shippingAddress, paymentMethod: req.body.paymentMethod, itemsPrice: req.body.itemsPrice, shippingPrice: req.body.shippingPrice, totalPrice: req.body.totalPrice, buyer: req.user._id, });Y aquí hay un ejemplo de trabajo:
const orderItems = [{ name: 'P1', quantity: 1, shop: 'S1', image: '/images/p1.jpg', price: 50, _id: '62dbb03e90c4ca14ee3e06fa', }, { name: 'P2', quantity: 1, shop: 'S2', image: '/images/p2.jpg', price: 50, _id: '62dbb03e90c4ca14ee3e06fb', }, { name: 'P3', quantity: 1, shop: 'S1', image: '/images/p3.jpg', price: 50, _id: '62dbb03e90c4ca14ee3e06fc', }]; const sellersSet = new Set(orderItems.map(x => x.shop)); const sellersArray = [...sellersSet]; // See here why the conversion to array is needed: console.log({ sellersSet, sellersArray });