The mitigate pain of dots and dollars project removed validation to allow documents with $-prefixed fields to be inserted. However, validation to prevent _id fields containing documents with $-prefixed fields was kept.
This validation is not present on the update path when an upsert happens, because upserts relied on storage_validation.cpp for validation, whereas insert has separate validation logic to handle this case. This allows documents like {_id: {$foo: 1}} to be inserted via an update with upsert set to true, causing BF-21347
We should ensure that the validation on _id fields which are objects which normally happens when a document is being inserted also happens when a document is being upserted.
- is related to
-
SERVER-75517 illegal format of `_id` possible via upsert
- Closed