MongoDB更新嵌套集合数组字段OperationalDetails的EndTime时报错如何解决
报错原因
报错的核心是部分满足Sector.Code: 'GROC'的文档中,OperationalDetails字段不是数组类型,而是对象类型,全数组更新符$[]无法作用在非数组字段上,因此触发该错误。
正确实现方案
第一步:过滤合法文档执行更新
在查询条件中新增数组类型校验,只匹配OperationalDetails为数组的文档,即可正常执行更新:
db.stores.update( { "Sector.Code": "GROC", // 新增校验:仅匹配OperationalDetails为数组的文档 "OperationalDetails": { $type: "array" } }, { $set: { "OperationalDetails.$[].EndTime": "06:00 PM" } }, { multi: true } )
可选:排查异常字段类型的文档
如果需要先找出OperationalDetails不是数组的异常文档,可执行以下查询:
db.stores.find({ "Sector.Code": "GROC", "OperationalDetails": { $not: { $type: "array" } } })
你可以根据业务逻辑先修正这些异常文档的字段类型,再执行全量更新即可覆盖所有目标门店。
内容的提问来源于stack exchange,提问作者Aneef
相关产品推荐
相关产品推荐

