在 mongodb 分片集合中如何更新分片键值

问题描述

我使用的是 mongo 4.2 版本。我创建了一个分片集合。我想更新几个包含分片键的字段的值。根据 mongo 文档 https://docs.mongodb.com/manual/core/sharding-shard-key/#change-a-document-s-shard-key-value 。它说我们可以更新分片键的值。但我收到以下错误

WebView

请让我知道我在这里遗漏了什么

我尝试了以下查询

Performing an update on the path 'status' would modify the immutable field 'status'

这是分片键

.updateOne({date:{'$gte': '2021-01-01','$lte': '2021-01-15'},status: 'U',type: 'SC',name: 'product1',currency: 'INR' },{$set: {status: 'M'}})

解决方法

首先确保您没有在与以前版本 db.adminCommand( { setFeatureCompatibilityVersion: "4.2" } ) 的功能兼容模式下运行数据库。在 v4.2 之前,分片键是不可变的。

然后确保没有文档中“状态”是复合主键 _id 的一部分: .find( { "_id.status": {$exists: true} } )。无论分片如何,_id 仍然是不可变的,这也是使用 ObjectID 作为主键的原因之一。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...