【问题标题】:How to update more than one field in sub document?如何更新子文档中的多个字段?
【发布时间】:2018-09-14 16:11:01
【问题描述】:
{
   movies: [
          {
            _id,
            title,
            rating
          }
        ]
}

我只想更新标题或评级或两者都存在。

我的查询应该是这样的

Movies.findOneAndUpdate('movies._id': movieId, { 
   movies.$.rating: rating, 
   movies.$.title: title 
});

但它不支持多位置运算符。

我认为可能的解决方案是发送整个电影对象并将其替换为

Movies.findOneAndUpdate('movies._id': movieId, { 
       movies.$: movie 
    });

我不想替换整个对象,或者我不想从前端发送整个电影对象。

请指导我优化解决方案。

【问题讨论】:

  • 您可以使用arrayFilter 更新嵌套数组。

标签: mongodb mongoose


【解决方案1】:
Movies.findOneAndUpdate({'movies._id': movieId},{$set:{title:req.body.title}} { 
   movies.$: movie 
});

【讨论】:

  • 虽然这段代码 sn-p 可以解决问题,但它没有解释为什么或如何回答这个问题。请include an explanation for your code,因为这确实有助于提高您的帖子质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。
【解决方案2】:

您可以使用数组过滤器https://jira.mongodb.org/browse/SERVER-1243

 db.movies.update(
        {}, 
        {$set: {“movies.$[i].title”: "newTitle", “movies.$[i].rating”: 4}}, 
{arrayFilters: [{i._id: "movieId"}]}}
       )

【讨论】:

    猜你喜欢
    • 2015-04-12
    • 2019-02-26
    • 2021-01-24
    • 1970-01-01
    • 2021-06-24
    • 1970-01-01
    • 2014-06-29
    • 1970-01-01
    • 2020-02-07
    相关资源
    最近更新 更多