MongoDB 6.0.8使用arrayFilters更新对象数组无生效问题
MongoDB数组更新未生效的问题解决
你的问题出在数组过滤器的变量名和数组元素的字段名重复了——你用了index作为过滤器变量,同时数组里的字段也叫index,MongoDB会把过滤器里的index当成变量,而不是匹配数组元素的index字段,所以根本找不到符合条件的元素。
修正后的查询语句应该把过滤器变量名改成和字段名不同的名称,比如elem:
Buildings.update({}, { $inc: { "floors.$[elem].index": -1 } }, { arrayFilters: [ { "elem.index": { $gt: 2 } } ], multi: true } );
这里做了两处关键修改:
- 将数组更新路径从
"floors.$[index]"改为"floors.$[elem].index",明确指定要更新的是数组元素里的index字段,同时用elem作为过滤器变量 - 数组过滤器条件改为
{ "elem.index": { $gt: 2 } },用变量elem指代数组元素,匹配其index字段大于2的项 - 额外加上
multi: true参数(如果需要更新所有符合条件的文档,而不只是第一个匹配的文档)
执行这个查询后,你的数据里floors数组中index为3和4的元素会被减1,变成2和3,最终数据会是:
{ _id: "YuzMQ5zKgktzrANsq", floors: [ { index: 0 }, { index: 1 }, { index: 2 }, { index: 2 }, { index: 3 }, ] }
另外注意:你的MongoDB 6.0.8版本完全支持arrayFilters(该特性从3.6版本起就已支持),只需确保操作的是正确的集合即可。
内容的提问来源于stack exchange,提问作者Gravity123
相关产品推荐
相关产品推荐

