我有這樣的結構:
{
_id: new ObjectId("634aa49f98e3a05346dd2327"),
filmName: 'Film number 1',
episodes: [
{
episodeName: 'Testing 1',
slugEpisode: 'testing-1',
_id: new ObjectId("6351395c17f08335f1dabfc9")
},
{
episodeName: 'Testing 2',
slugEpisode: 'testing-2',
_id: new ObjectId("6351399d9a2533b9be1cbab0")
},
],
},
{
_id: new ObjectId("634aa4cc98e3a05346dd232a"),
filmName: 'Film number 2',
episodes: [
{
episodeName: 'Something 1',
slugEpisode: 'something-1',
_id: new ObjectId("6367cce66d6b85442f850b3a")
},
{
episodeName: 'Something 2',
slugEpisode: 'something-2',
_id: new ObjectId("6367cd0e6d6b85442f850b3e")
},
],
}
我收到了 3 個欄位:
_id: 電影_idepisodeId: 劇集_idepisodeName: 我要更新的內容
我試圖找到一個特定Film ID的來獲取特定的電影,然后從那時起,我通過一個在陣列Episode ID中找到確切的情節。episodes然后,更新該episodeName特定劇集的。
這是我在 NodeJS 中的代碼:
editEpisode: async (req, res) => {
const { _id } = req.params
const { episodeId, episodeName } = req.body
try {
const specificResult = await Films.findOneAndUpdate(
{ _id, 'episodes._id': episodeId },
{ episodeName }
)
console.log(specificResult)
res.json({ msg: "Success update episode name" })
} catch (err) {
return res.status(500).json({ msg: err.message })
}
},
但是console.log給我顯示的是一個完整的檔案,當我簽入MongoDB時,根本沒有更新,我的使用方式findOneAndUpdate不正確嗎?
我正在閱讀這份檔案:MongooseJS - Find One and Update,他們說這個讓我可以選擇filterand update。
uj5u.com熱心網友回復:
MongoDB 服務器需要知道要更新哪個陣列元素。如果只有一個陣列元素要更新,這是您可以做到的一種方法。(我選擇了一個特定的元素。你會使用你的req.paramsand req.body。)
db.films.update({
"_id": ObjectId("634aa4cc98e3a05346dd232a"),
"episodes._id": ObjectId("6367cd0e6d6b85442f850b3e")
},
{
"$set": {
"episodes.$.episodeName": "Something Two"
}
})
在mongoplayground.net上試試。
uj5u.com熱心網友回復:
您可以使用過濾的位置運算子 $[<identifier>],它本質上是找到具有過濾條件的元素或物件(在您的情況下)并更新它。
詢問:
const { _id } = req.params
const { episodeId, episodeName } = req.body
await Films.update({
"_id": _id
},
{
$set: {
"episodes.$[elem].episodeName": episodeName
}
},
{
arrayFilters: [
{
"elem._id": episodeId
}
]
})
在這里檢查一下,例如,我將 ids 作為數字和劇集名稱以更新為“UpdatedValue”
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/528255.html
