node.js - 如何找到特定文档并更新数组内特定键的值?

标签 node.js mongodb mongoose

我有这样的结构:

{
  _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:影片_id
  • episodeId:剧集_id
  • episodeName:我要更新的内容

我尝试查找特定的电影 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.paramsreq.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/

相关文章:

node.js - 使用 npm 安装 Node 扬声器时出错

mongodb - 取消设置文档::元素,MongoCXX 查找选项投影

javascript - MongoDB/Mongoose - 通过执行加法更新文档中的数字

node.js - 如何将PM2日志写入sumologic?

javascript - 在 Node.js 中记录每个函数调用,而不进行无限递归

javascript - 如何在一次查询中获取多个计数?

java - 如何将 MongoDB 与 ColdFusion 结合使用

node.js - 如何在 Mongoose 中实现部分文档嵌入?

Node.js 日期对象存储在 MongoDB 中为 "1970-01-01T00:00:00.001Z"

node.js - 使用 django 和 nodejs 为 websocket 设置 nginx 的配置(wss ://)