假設我有一個檔案結構的集合。
{
uuid: "157071f4-2624-4c49-8735-bd345425a16b",
price: {
item1: 20,
item2: 30
}
}
現在我想更新基于 uuid 的資料,使用類似的東西
await Coll.findOneAndUpdate({uuid}, {$set: {[`price.${itemNo}`]: 40}, {upsert: true}}
我的問題是即使在 itemNo 已經存在的情況下,這里的 $set 也會更新值。如果我檢查查詢,例如,
{uuid, [`price.${itemNo}`]: {$exists: 0}}
然后即使 uuid 存在,它也會由于 upsert 而創建一個新檔案。
我的最終目標是如果 uuid 不存在并且如果 uuid 存在則實作 upsert 如果它也存在則不要更新“price.item”的值,否則設定值。有些東西$setOnInsert
也不符合我只需要更新值的要求。提前致謝。
uj5u.com熱心網友回復:
得到了解決方案。我們可以通過首先定義我們的更新欄位來實作這一點:
let fieldName = `price.${itemNo}`
然后做類似的事情:
await Coll.findOneAndUpdate({
uuid
},
[{
$set: {
[fieldName]: {
$cond: [{
$or: [
{$ne: ["$price", null]},
{$ne: [`$${fieldName}`, null]}
]
}, valueToBeSet, `$${fieldName}`]
}
}
}], {upsert: true}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/481732.html
下一篇:返回列表