Nestjs猫鼬,如何通过_id删除数组成员?

时间:2020-06-04 22:30:15

标签: mongodb typescript mongoose nestjs

架构是这样的。这是一个装有物品的购物车:

export interface Cart extends mongoose.Document {
  userId: string;
  total: number;
  count: number;
  status: string;
  items: [
    {
      itemId: string;
      itemName: string;
      count: number;
      price: number;
      itemTotal: number;
    },
  ];
}

如果查看mondodb数据,则items数组中的每个成员都有一个_id。 我有这个_id,我想通过该_id删除一个项目。 问题是,它是打字稿,而_id不是架构的一部分。 这是我用来删除项目的代码:

const cart = await this.cartModel.findOneAndUpdate(
   { _id: dto.cartId },
   { $pull: { items: { _id: '1234567890' } } },
   { new: true },
);

这意味着,在该特定购物车中,找到_id等于1234567890的商品,然后将其删除。 但是_id呈红色弯曲,因为它不是我的架构的一部分。 我该如何解决?

2 个答案:

答案 0 :(得分:1)

应为 id 而不是 _id 。因为_id是一个对象。但是我们的查询无法将对象发送到params。因此,它应该是hexString。

您可以通过以下方式将实体_id更改为id:

 @ObjectIdColumn()
 @Transform(id => id.toString())
 id: string;

因此,您可以在任何地方将id用作hexString。希望对您有帮助

答案 1 :(得分:0)

由于缺乏更好的解决方案,我通过添加一个名为timeStamp的文本字段来绕过此问题。当将商品添加到购物车时,我将当前时间(以毫秒为单位)推送到该字段,该时间足以区分购物车中的条目。如果您想知道,itemId不够好,因为人们可以在2行或更多行中使用相同的项目使用不同的详细信息。我当然已经在模式中添加了新字段,所以打字稿不会抱怨;)

相关问题