-
Enhancement
-
Resolution: Done
-
Minor
-
1.1.0.Beta1
-
None
"Update" change events for MongoDB do not include all of the fields needed when the event is from a sharded collection that uses multiple fields for the shard key. Here is what an "update" oplog entry looks like where the shard key is made up of dc, acctId and _id:
{ "ts" : Timestamp(1570559743, 2), "t" : NumberLong(180), "h" : NumberLong(-2190864266344322319), "v" : 2, "op" : "u", "ns" : "Asset", "ui" : UUID("8667a4d5-051f-4257-bfa4-451b6836b651"), "o2" : { "dc" : "west", "acctId" : NumberLong(1234567), "_id" : NumberLong(902345287483) }, "wall" : ISODate("2019-10-08T18:35:43.431Z"), "o" : { "$v" : 1, "$set" : {...} } }
The current code will just use the _id field as the key so the other two fields will be lost:
{ "schema": { "type": "struct", "fields": [ { "type": "string", "optional": false, "field": "id" } ], "optional": false, "name": "Asset.Key" }, "payload": { "id": "902345287483" } }
I propose that when multiple fields are in o2 the key should use all of them as the id like so:
{ "schema": { "type": "struct", "fields": [ { "type": "string", "optional": false, "field": "id" } ], "optional": false, "name": "Asset.Key" }, "payload": { "id": "{ \"dc" : \"west\" , \"acctId\" : 1234567, \"_id\" : 902345287483}" } }