MongoDB updateMany更新嵌套数组报错:路径comments.likes不存在
解决MongoDB更新点赞名称时的路径不存在错误
这个报错的根源在于你当前的查询仅过滤了存在comments数组的文档,但comments数组里的部分评论可能根本没有likes字段。当MongoDB尝试对这些没有likes的评论执行$set操作时,找不到comments.likes这个路径,就会抛出错误。
要解决这个问题,你需要在查询条件里进一步缩小范围,只匹配那些至少有一条评论包含likes数组,且该数组中存在目标用户点赞的文档。我们可以通过嵌套$elemMatch来实现这个精准过滤逻辑:
return this.model.updateMany( { comments: { $exists: true, $elemMatch: { likes: { $exists: true, $elemMatch: { 'actor.username': user.username } } } } }, { $set: { 'comments.likes.$[like].actor.firstName': user.firstName, 'comments.likes.$[like].actor.lastName': user.lastName, }, }, { multi: true, arrayFilters: [ { 'like.actor.username': user.username } ], }, );
修复关键点说明:
- 在
comments的条件中新增了外层$elemMatch,确保我们只处理那些comments数组里至少有一条评论符合要求的文档。 - 内层的条件分为两部分:
- 该评论必须存在
likes数组(likes: { $exists: true }) - 这个
likes数组里至少有一个点赞的actor.username匹配目标用户(通过内层$elemMatch实现)
- 该评论必须存在
这样修改后,MongoDB只会对确实包含目标用户点赞的文档执行更新操作,彻底避免了路径不存在的报错问题。
内容的提问来源于stack exchange,提问作者user1037355
相关产品推荐
相关产品推荐

