一个快速的问题,所以我试图更新许多文档,但是出现错误“无法并行多次保存()相同的文档”。问题在于,有时(并非总是)猫鼬可能试图并行更新相同的产品信息。我的意思是,可以说我有产品ID的列表。然后,我尝试获取所有这些产品(某些产品的价格可能会翻倍,因为它们可能会有不同的变化)
const uniqueProductIds = [...new Set(productIds)];
const products = await Products.find({ active: true, verified: true })
.where("productId")
.in(uniqueProductIds)
.exec();
问题是,当我稍后尝试修改“产品”并保存到forEach中时,出现上述错误。我的问题是我尝试使用updateMany来做到这一点,但没有运气:)这是我的foreach:
products.forEach((product: ProductDoc) => {
cart.items.forEach(async (cartProduct: CartItem) => {
if (product.productId === cartProduct.id) {
let newQuantity = Number(product.quantity) - Number(cartProduct.quantity);
if (newQuantity < 0) {
Sentry.captureMessage(
`SOLD more products then there actually is in stock. ${JSON.stringify(product.productID)}`
);
newQuantity = 0;
}
product.sold = product.sold
? Number(product.sold) + Number(cartProduct.quantity)
: Number(cartProduct.quantity);
product.quantity = newQuantity;
}
});
});
问题是如何不使用forEach就能更新许多文档,并且我能够用一个猫鼬方法来完成它。