【发布时间】:2020-01-16 06:32:32
【问题描述】:
需要更新所有文档的一个字段的值。不幸的是,该字段是该集合的分片键。比如集合里面的文档如下,
{
"_id" : ObjectId("5c0763afaabfc3000eb44cc0ss"),
"sensorId" : "someid",
"liftId" : "some-lift-id", //Shared key
"startTimestamp" : NumberLong(1543988140912),
"endTimestamp" : NumberLong(0),
"value" : {}
}
我想在所有文档中将liftId 的值更新为新值(新值>> prefix-some-lift-id)。
这是我尝试过的,
db.getCollection('lift_events').find({}).forEach(
function (elem) {
db.getCollection('lift_events').update(
{
_id: elem._id
},
{
$set: {
liftId: 'prefix-' + elem.liftId
}
}
);
}
);
但这失败了,因为liftId 是集合的分片键。有没有办法在不指定分片键的情况下为所有分片实现这一点?
db.version() : 3.4.6 这是 Azure Cosmos DB 的 MongoDB API
【问题讨论】:
-
在 MongoDB 中,shard key field and values are immutable。这意味着无法更改分片键字段,并且无法更改每个文档的分片键值。我不知道 Azure Cosmos DB's API for MongoDB 的这种行为;请参考相应的文档。