我有一个这样的 struct :

{
  _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:我希望更新的内容

我试图找到一个特定的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,他们说这份文件给了我filterupdate的 Select .

推荐答案

MongoDB服务器需要知道要更新哪个数组元素.如果只有一个数组元素需要更新,这里有一种方法可以实现.(我 Select 了一个特定的元素.你会用你的req.paramsreq.body.)

db.films.update({
  "_id": ObjectId("634aa4cc98e3a05346dd232a"),
  "episodes._id": ObjectId("6367cd0e6d6b85442f850b3e")
},
{
  "$set": {
    "episodes.$.episodeName": "Something Two"
  }
})

试穿一下mongoplayground.net号.

Node.js相关问答推荐

MongoServelSelection错误:服务器 Select 在30000 ms后超时

使用Vite和ReactJS时,在哪里设置NODE_OPTIONS?

NX无法使用缓存运行根级脚本

在我的Next.js应用程序中没有正确设置Process.env.NODE_ENV

NPM:一般的npm二进制依赖可以静态构建吗?

JEST模拟由http服务器控制器导入的ES模块

将图像添加到多个产品的条带 checkout 会话中

如何使用mongoose引用不在项目中的模型

如何在 JavaScript 中显示多维数组中使用的一维数组的变量名?

mongoose findOneAndUpdate 不更新数据库

如何使用包含条件正确分页的 sequelize 查询?

ResponseError:键空间ks1不存在

无服务器部署使用无服务器组合抛出`spawn serverless ENOENT`

使用 create-expo-app 时如何更改 webpack-config.js 中的哈希函数?

在 node:readline 中按 CTRL+D 时会发出什么信号?

Node.js 服务器中没有缓存

Puppeteer 记录在 page.evaluate

如何从 find 方法返回 Mongoose 结果?

如何在express 中设置默认路径(路由前缀)?

使用 Monit 而不是基本的 Upstart 设置有什么好处?