Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb Nestjs Mongoose,如何通过其_id删除数组成员?_Mongodb_Typescript_Mongoose_Nestjs - Fatal编程技术网

Mongodb Nestjs Mongoose,如何通过其_id删除数组成员?

Mongodb Nestjs Mongoose,如何通过其_id删除数组成员?,mongodb,typescript,mongoose,nestjs,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;

模式是这样的。这是一个购物车,里面有:

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删除一个项目。 问题是,它是typescript,并且_id不是模式的一部分。 以下是我用来删除项目的代码:

const cart = await this.cartModel.findOneAndUpdate(
   { _id: dto.cartId },
   { $pull: { items: { _id: '1234567890' } } },
   { new: true },
);
这意味着,在该特定购物车中,找到id等于1234567890的商品,并将其删除。 但是_id是红色的,因为它不是我的模式的一部分。 如何解决这个问题?

它应该是id而不是id。因为id是一个对象。但我们的查询无法将对象发送到参数。所以,它应该是一个十六进制字符串

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

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

所以,您可以在任何地方使用id作为十六进制字符串。希望它有帮助

由于缺乏更好的解决方案,我通过添加一个名为timeStamp的文本字段绕过了这个问题。当一个项目被添加到购物车中时,我将当前时间(以毫秒为单位)推送到该字段,该字段是唯一的,足以区分购物车中的条目。如果您想知道,itemId还不够好,因为人们可以在两行或更多行中使用不同的细节来显示相同的项目。当然,我已经在我的模式中添加了新字段,所以typescript并没有抱怨

您的模式是什么样子的?和界面一样吗?或者您正在使用子文档架构?如果架构中未定义_id,则默认情况下它是一个ObjectId。请使用Types.ObjectId将id转换为ObjectId。您可以始终使用Types.ObjectDobjectString将其转换为mongoose的ObjectId。queryid也无效,因为它不是我的类的一部分。我想这不是猫鼬的错,在纯javascript中它会工作得很好。但是按照Nest.js的工作方式,我无法访问该字段。