escape names with invalid characters in mongodb query field selection #175
+76
−5
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
We had a bug when selecting fields with names containing dollar signs or dots, or when selecting fields using aliases containing those characters. What happened is the mongodb query plan would produce a stage like this:
The use of
"foo.bar"
leads to this error:The fix is, as the error suggests, to use the
$setField
operator which takes afield
argument that is not evaluated as an expression, and is therefore allowed to contain arbitrary characters.But that leads to an issue when we want to select multiple fields: in the first snippet the argument to
$replaceWith
was an object literal where we could set multiple fields. OTOH{ "$setField": { ... } }
is an expression that produces an object with a single field, and does not accept more keys. To select multiple fields with escaping we have to nest calls to$setField
for every selected field. For example,So that is what this PR does.