MongoDB更新数组的多条记录[重复]

2024-04-16

我最近开始使用 MongoDB,并且有一个关于更新文档中的数组的问题。 我得到这样的结构:

{
"_id" : ObjectId(),
"post" : "",
"comments" : [
        {
                "user" : "test",
                "avatar" : "/static/avatars/asd.jpg",
                "text" : "....."
        }
        {
                "user" : "test",
                "avatar" : "/static/avatars/asd.jpg",
                "text" : "....."
        }
        {
                "user" : "test",
                "avatar" : "/static/avatars/asd.jpg",
                "text" : "....."
        }
        ...
   ]
}

我正在尝试执行以下查询:

update({"comments.user":"test"},{$set:{"comments.$.avatar": "new_avatar.jpg"}},false,true)

问题是它更新所有文档,但它只更新每个文档中的第一个数组元素。有什么方法可以更新所有数组元素,或者我应该尝试手动执行此操作? 谢谢。


您无法在单个更新操作中修改多个数组元素。因此,您必须重复更新才能迁移需要修改多个数组元素的文档。您可以通过迭代集合中的每个文档,重复应用更新来完成此操作$elemMatch直到该文档的所有相关注释被替换,例如:



db.collection.find().forEach( function(doc) {
  do {
    db.collection.update({_id: doc._id,
                          comments:{$elemMatch:{user:"test",
                                                avatar:{$ne:"new_avatar.jpg"}}}},
                         {$set:{"comments.$.avatar":"new_avatar.jpg"}});
  } while (db.getPrevError().n != 0);
})
  

请注意,如果您的应用程序需要此操作的效率,则您应该规范化架构,以便将用户头像的位置存储在单个文档中,而不是存储在每个注释中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MongoDB更新数组的多条记录[重复] 的相关文章

随机推荐