Currently, replacement style updates target using the update rather than the query. We should change this to target using the query instead.
As of today, we do not allow users to change the shard key for a document. If shard 1 owns the chunk with range (shardKey : min, shardKey : 500) and shard 2 owns the chunk with range (shardKey : 500, shardKey : max) and a user sends
db.coll.update({shardKey : 100}, {shardKey : 800})
the update will be sent to shard 2 and we return
{ok: 1.0, nMatched : 0)
We should actually get an ImmutableField error.
Once we allow a user to update the shard key for a document (PM-1163), the above update should cause the document to change shards. However, since the update would be sent to shard 2, shard 1 will never actually see this update and the update will not be applied.
- is depended on by
-
SERVER-40338 Add tests that replacement style and pipeline updates can update the shard key value
- Closed
-
DRIVERS-660 Change updates to prefer target by the query
- Closed
-
MONGOID-4759 Change updates to prefer target by the query
- Backlog
-
SERVER-40903 Ensure full shard key in query to allow shard key updates
- Closed
- is related to
-
SERVER-41184 Add metrics to indicate the amount of sharded updates done with only _id in query
- Closed
- related to
-
SERVER-46505 Add back requirement that full shard key must be in query to update a shard key value
- Closed