架构是这样的。这是一个装有物品的购物车:
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呈红色弯曲,因为它不是我的架构的一部分。 我该如何解决?
答案 0 :(得分:1)
应为 id 而不是 _id 。因为_id是一个对象。但是我们的查询无法将对象发送到params。因此,它应该是hexString。
您可以通过以下方式将实体_id更改为id:
@ObjectIdColumn()
@Transform(id => id.toString())
id: string;
因此,您可以在任何地方将id用作hexString。希望对您有帮助
答案 1 :(得分:0)
由于缺乏更好的解决方案,我通过添加一个名为timeStamp的文本字段来绕过此问题。当将商品添加到购物车时,我将当前时间(以毫秒为单位)推送到该字段,该时间足以区分购物车中的条目。如果您想知道,itemId不够好,因为人们可以在2行或更多行中使用相同的项目使用不同的详细信息。我当然已经在模式中添加了新字段,所以打字稿不会抱怨;)