我有一個資料結構:
{
field: 1,
field: 3,
field: [
{ _id: xxx , subfield: 1 },
{ _id: xxx , subfield: 1 },
]
}
我需要更新陣列中的某個元素。
到目前為止,我只能通過拉出舊物件并推入新物件來做到這一點,但它會更改檔案順序。
我的實作:
const product = await ProductModel.findOne({ _id: productID });
const price = product.prices.find( (price: any) => price._id == id );
if(!price) {
throw {
type: 'ProductPriceError',
code: 404,
message: `Coundn't find price with provided ID: ${id}`,
success: false,
}
}
product.prices.pull({ _id: id })
product.prices.push(Object.assign(price, payload))
await product.save()
我想知道是否有任何原子方式來實作它。因為這種方法似乎并不安全。
uj5u.com熱心網友回復:
是的,如果你能找到它,你可以更新陣列中的特定物件。在此處查看位置“$”運算子。
您當前使用 mongoose 的實作將有點像這樣:
await ProductModel.updateOne(
{ _id: productID, 'prices._id': id },//Finding Product with the particular price
{ $set: { 'prices.$.subField': subFieldValue } },
);
注意price.$.subField 中的“$”符號。MongoDB 足夠聰明,只更新查詢找到的索引處的元素。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/372910.html
標籤:javascript MongoDB 猫鼬 节点
