我想更新对象"profileSpheres"的array. 如果"profileSpheres.idq"等于"Q0800","profileSpheres.ida"等于"A0810_001",则"profileSpheres.ida"必须是"A0800_001".

这是link to the playground美元

文件示例:

  {
    "_id": 0,
    "idu": "AA0092",
    "profileSpheres": [
      {
        "idq": "Q0780",
        "ida": "A0780_002",
        "value": null,
        "explain": null,
        "date": "2023-12-26T04:03:57.196Z"
      },
      {
        "idq": "Q0800",
        "ida": "A0810_001",
        "value": null,
        "explain": "encorvar la espalda mucho rato o usar mochilas pesadas ",
        "date": "2023-12-26T04:04:37.679Z"
      },
      {
        "idq": "Q0810",
        "ida": "A0810_002",
        "value": null,
        "explain": null,
        "date": "2023-12-26T04:04:37.755Z"
      },
      {
        "idq": "Q0820",
        "ida": "A0820_002",
        "value": null,
        "explain": null,
        "date": "2023-12-26T04:04:40.411Z"
      }
    ]
  }

这是我的代码:

db.collection.updateMany({
  "idu": "AA0092"
},
{
  "$set": {
    "profileSpheres.$[elem].ida": "A0800_001"
  },
  "arrayFilters": [
    {
      "elem.idq": "Q0800"
    },
    {
      "elem.ida": "A0810_001"
    }
  ]
})

推荐答案

arrayFilters应该在更新{}之外.试试这个:

db.collection.update(
  {"idu": "AA0092"},
  {"$set": {"profileSpheres.$[elem].ida": "A0800_001"}},
  {"arrayFilters": [
    {
      "elem.idq": "Q0800",
      "elem.ida": "A0810_001"
    }
  ]}
)

看看它在mongoDB playground号公路上是如何工作的

Mongodb相关问答推荐

为什么我的Mongoose更新找不到匹配?

将子元素的数组值提取到 mongodb 中的单个数组中?

如何使用内部数组中的值更新文档

从MongoDB迁移到PostgreSQL:为PostgreSQL编写聚合管道查询

MongoDB查询优化

MongoDB 到 Snowflake 连续加载

如何根据_id删除文档?

使用模拟 MongoDB 服务器进行单元测试

使用 MongoDB C# 驱动程序在嵌套数组上使用过滤器生成器进行查询

MongoDB - 清除嵌套数组中的元素

try 解析序列化 JSON 字符串时处理 MongoDB 的 ISODate()

如何解决 ClassNotFoundException:com.mongodb.connection.BufferProvider?

Python - Pymongo 插入和更新文档

Mongoose / MongoDB 用户通知方案建议

在 mongoose 中使用 UUID 进行 ObjectID 引用

MongoDB 用 $type 匹配一个数组?

MongoDb:聚合 $lookup 过滤外部文档

是否可以在 Mongodb 中的两个数据库之间进行 $lookup 聚合?

对于社交网站(使用 Ruby on Rails 开发)来说,MongoDB 会是一个好主意吗?

我需要手动关闭mongoose连接吗?