我一直在嘗試使用該findOneAndUpdate()方法更新 Mongodb 檔案中的特定物件,但沒有任何運氣。這就是我的收藏品的樣子
{
_id: new ObjectId("61da0ab855483312e8f4483b"),
products: [
{
createdAt: 2022-01-08T22:05:44.635Z,
_id: new ObjectId("61da0ab855483312e8f4483c"),
productCode: 'otf',
productName: 'facebookmeta',
claims: [Array],
permissions: []
},
{
createdAt: 2022-01-08T22:05:44.635Z,
_id: new ObjectId("61da0ab855483312e8f4483f"),
productCode: '4pf',
productName: 'twitteroauth',
claims: [Array],
permissions: [Array]
}
],
__v: 0
}
當我嘗試這樣的事情時。我正在嘗試根據其產品代碼查找單個物件并更新該物件
ProductModel.findOneAndUpdate({productCode: userData.productCode}, dataToBeUpdated, {new: true})
它回傳一個
Performing an update on the path '_id' would modify the immutable field '_id
我懷疑 MongoDB 正在對集合應用查詢條件并回傳匹配檔案的結果,因此它可能回傳兩個物件,這可能是我遇到的錯誤的原因,但我可能是錯的。
我怎樣才能有效地將它指向正確的物件并執行更新
uj5u.com熱心網友回復:
MongoDB 支持使用位置運算子 ($) 對子檔案進行單級深度更新。
db.collection_name.update({
_id: ObjectId("61da0ab855483312e8f4483b"),
"products.productCode": "4pf"
},
{
"$set": {
"products.$.productName": "twitteroauth name updated"
}
})
在上面的更新子句中,$ 將在運行時被子檔案的匹配索引替換。
例如 $ 將在運行時被值 1 替換,因為 "products.productCode": "4pf" 條件
請注意以下幾點:
- 您必須將陣列欄位作為查詢檔案的一部分。
- 位置運算子不能用于嵌套陣列內的更新。
附加參考:https ://docs.mongodb.com/manual/reference/operator/update/positional/
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/414593.html
標籤:
