【问题标题】:In mongodb sharded collection how to update the shard key values在 mongodb 分片集合中如何更新分片键值
【发布时间】:2021-07-14 08:29:45
【问题描述】:

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

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'}})

这是分片键

 shard key: {
                        "date" : 1,
                        "status" : 1,
                        "type" : 1,
                        "name" : 1,
                        "currency" : 1
                        }

【问题讨论】:

  • 你的分片键(复合键?)是什么?你的更新是什么样子的?
  • 你试过updateMany()(或multi: true)吗?您只能更新单个文档,即updateOne()
  • 还发布一个示例输入文档,并说明您的分片键是什么。

标签: mongodb sharding mongodb-update


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-31
    • 2021-07-26
    • 1970-01-01
    • 1970-01-01
    • 2018-12-15
    • 1970-01-01
    • 1970-01-01
    • 2021-08-21
    相关资源
    最近更新 更多