我需要将以下 struct 中的dateP更新为"2022-01-02",但这似乎不是一项容易的任务:

{
  "_id": ObjectId("5c05984246a0201286d4b57a"),
  "_a": [
    {
      "_p": {
        "s": {
          "a": {}
        }
      }
    },
    {
      "_onlineStore": {}
    },
    {
      "_p": {
        "s": {
          "a": {
            "t": [
              {
                c: 4
              },
              {
                "dateP": "20200-09-20",
                "l": "English",
                "size": "XXL"
              },
              {
                c: 1
              }
            ]
          },
          c: {
            t: 2
          }
        }
      }
    }
  ]
}

playground

我try 使用arrayFilters,但没有成功,因为并不是所有的元素都存在于所有文档中,而且有些文档非常空.敬请指教.

MongoDB 4.2社区

推荐答案

相信您需要_a数组的过滤位置运算符来判断文档是否有_p字段.

db.collection.update({},
{
  $set: {
    "_a.$[a]._p.s.a.t.$[x].dateP": "2022-01-02"
  }
},
{
  arrayFilters: [
    {
      "a._p": {
        $exists: true
      }
    },
    {
      "x.dateP": "20200-09-20"
    }
  ]
})

Demo @ Mongo Playground

Mongodb相关问答推荐

查找/查找单个深度嵌套文档的多个集合

从MongoDB中的嵌套数组中提取找到的值及其索引

在对象mongodb的数组中查找元素

MongoDB 投影按数组中的字符串长度排序

Tableau 与 Mongo DB Atlas by MongoDB 的连接缓存问题

如何在 MongoDB 中的集合下查找同一文档

有没有一种方法可以找到一个文档并通过 Go 更改 mongodb 中的 id/value 来克隆它

更新 MongoDB 中嵌套实体数组中的属性

使用 Flask-pymongo 扩展通过 _id 在 MongoDB 中搜索文档

查找对象是否在预保存钩子mongoose中更改

声明多个模式后无法从数据库中获取数据(mongoose + express + mongodb

你如何让 mongo 在远程服务器上运行?

使用 MongoDB 更新数组字段内的特定键/值

从 LinkedHashMap 转换为 Json 字符串

Mongoose 是否真的验证了对象 ID 的存在?

MongoDB 查找精确的数组匹配,但顺序无关紧要

如何确保基于特定字段的数组中的唯一项 - mongoDB?

MongoError:Topology is closed, please connect despite established database connection

如何使用 mgo 和 Go 查询 MongoDB 的日期范围?

无法使用命令写入模式错误,降级到兼容模式