我有这样的结构:
{
_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:_id集episodeName:我想更新的内容我试图找到一个特定的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 -找到一个并更新,他们说这个给了我选择filter和update的选择。
发布于 2022-11-06 23:31:33
MongoDB服务器需要知道要更新哪个数组元素。如果只有一个数组元素需要更新,那么您可以这样做。(我选了一个特定的元素。你可以使用你的req.params和req.body。)
db.films.update({
"_id": ObjectId("634aa4cc98e3a05346dd232a"),
"episodes._id": ObjectId("6367cd0e6d6b85442f850b3e")
},
{
"$set": {
"episodes.$.episodeName": "Something Two"
}
})在mongoplayground.net上试一试。
发布于 2022-11-06 23:35:43
您可以使用带有筛选条件的元素或对象(在您的情况下)的$[<identifier>],并对其进行更新。
查询:
const { _id } = req.params
const { episodeId, episodeName } = req.body
await Films.update({
"_id": _id
},
{
$set: {
"episodes.$[elem].episodeName": episodeName
}
},
{
arrayFilters: [
{
"elem._id": episodeId
}
]
})以看看这里为例,我将I作为编号和节目名称来更新为"UpdatedValue“
https://stackoverflow.com/questions/74340407
复制相似问题