首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在数组中找到特定文档并更新特定键的值?

如何在数组中找到特定文档并更新特定键的值?
EN

Stack Overflow用户
提问于 2022-11-06 23:01:55
回答 2查看 35关注 0票数 2

我有这样的结构:

代码语言:javascript
复制
{
  _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中的代码:

代码语言:javascript
复制
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 -找到一个并更新,他们说这个给了我选择filterupdate的选择。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-11-06 23:31:33

MongoDB服务器需要知道要更新哪个数组元素。如果只有一个数组元素需要更新,那么您可以这样做。(我选了一个特定的元素。你可以使用你的req.paramsreq.body。)

代码语言:javascript
复制
db.films.update({
  "_id": ObjectId("634aa4cc98e3a05346dd232a"),
  "episodes._id": ObjectId("6367cd0e6d6b85442f850b3e")
},
{
  "$set": {
    "episodes.$.episodeName": "Something Two"
  }
})

mongoplayground.net上试一试。

票数 1
EN

Stack Overflow用户

发布于 2022-11-06 23:35:43

您可以使用带有筛选条件的元素或对象(在您的情况下)的$[<identifier>],并对其进行更新。

查询:

代码语言:javascript
复制
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“

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74340407

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档