-
Type: Improvement
-
Resolution: Unresolved
-
Priority: Major - P3
-
None
-
Affects Version/s: None
-
Component/s: None
-
None
The ODMs need to either:
- never use the upsert=True when updating documents, or
- track the shard key for a collection and automatically add the shard key to updates with upsert=True
Original Server ticket description :
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.
- depends on
-
SERVER-39158 Change updates to prefer target by the query
- Closed
- is related to
-
DRIVERS-660 Change updates to prefer target by the query
- Closed
- related to
-
DRIVERS-817 updateOne, updateMany, deleteOne, and findAndModify without shard key
- Development Complete
-
MONGOID-4902 Include shard key when reloading documents for improved query performance with Atlas Global Write clusters
- Closed