Aún no tienes acceso a esta clase

Crea una cuenta y continúa viendo este curso

Manipulación de arrays en MongoDB

23/24
Recursos
// src/users/services/orders.service.ts

export class OrdersService {
  ...
  async removeProduct(id: string, productId: string) { // 👈 
    const order = await this.orderModel.findById(id);
    order.products.pull(productId);
    return order.save();
  }

  async addProducts(id: string, productsIds: string[]) {  // 👈 
    const order = await this.orderModel.findById(id);
    productsIds.forEach((pId) => order.products.push(pId));
    return order.save();
  }
}
// src/users/dtos/order.dto.ts

...

export class AddProductsToOrderDto {
  @IsArray()
  @IsNotEmpty()
  readonly productsIds: string[];
}
// src/users/controllers/orders.controller.ts

import {
  CreateOrderDto,
  UpdateOrderDto,
  AddProductsToOrderDto,
} from '../dtos/order.dto';

@Controller('orders')
export class OrdersController {

  @Put(':id/products') // 👈 add product
  addProducts(
    @Param('id') id: string,
    @Body() payload: AddProductsToOrderDto,
  ) {
    return this.ordersService.addProducts(id, payload.productsIds);
  }

  @Delete(':id/product/:productId') // 👈 delete product
  removeProduct(
    @Param('id') id: string,
    @Param('productId') productId: string,
  ) {
    return this.ordersService.removeProduct(id, productId);
  }
}

Aportes 1

Preguntas 5

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

Para evitar duplicados en orders.productsIds podemos usar el operador de mongo $addToSet. Este operador agrega los elementos al array a menos que el valor ya se encuentre en el mismo.

// Products
  async addProducts(idOrder: string, productsIds: string[]){
    const order = await this.OrderModel.findByIdAndUpdate(
      idOrder,
      { $addToSet: { productos: productsIds }}
    )

    if(!order){
      throw new NotFoundException(`order ${idOrder} not found`);
    }

    return await order.save();
  }