You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MongoDB按多条件更新内嵌对象数组仅第一个生效如何解决?

问题原因

  • 当前查询条件没有限制task_group_id和task_id必须匹配同一个task_groups数组元素。MongoDB默认处理数组多字段查询时,只要整个数组内存在任意元素满足task_group_id条件、同时存在任意元素满足task_id条件,就会判定文档匹配,不会要求两个条件落在同一个数组元素上。
  • 位置运算符$只会记录第一个满足数组匹配规则的元素下标,所以每次更新的都是第一个数组元素,匹配第二个task_group_id的更新请求自然无法生效。另外你原有语句的$set外层遗漏了对象包裹,也存在语法问题。

解决方法

在查询条件中使用$elemMatch运算符,限定同一个task_groups数组元素同时满足task_group_id和task_id两个条件,即可让$正确定位到你要更新的数组元素。

修改后的更新语句如下:

db.task_status.updateOne(
{
        user_id: new ObjectId(payload.user_id),
        taskboard_id: new ObjectId(payload.taskboard_id),
        "task_groups": {
            $elemMatch: {
                task_group_id: new ObjectId(payload.task_group_id),
                task_id: new ObjectId(payload.task_id)
            }
        }
 },
 {
    $set: {
          "task_groups.$.is_completed": payload.is_completed,
          "task_groups.$.completion_date": new Date(),
    }
 }
);

内容的提问来源于stack exchange,提问作者justAnAnotherCoder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 10:36:04