我有这样的结构:
{
_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
:我要更新的内容
我尝试查找特定的电影 ID
来获取特定的电影,从那时起,我通过一个剧集 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 ,他们说这个让我可以选择过滤
和更新
。
最佳答案
MongoDB 服务器需要知道要更新哪个数组元素。如果只有一个数组元素需要更新,可以采用以下一种方法。 (我选择了一个特定元素。您将使用您的 req.params
和 req.body
。)
db.films.update({
"_id": ObjectId("634aa4cc98e3a05346dd232a"),
"episodes._id": ObjectId("6367cd0e6d6b85442f850b3e")
},
{
"$set": {
"episodes.$.episodeName": "Something Two"
}
})
试试 mongoplayground.net .
关于node.js - 如何找到特定文档并更新数组内特定键的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74340407/