-
Type: Task
-
Resolution: Fixed
-
Priority: Major - P3
-
Affects Version/s: None
-
Component/s: manual
-
Labels:
Description
In 4.3 users will be allowed to apply the positional projection to fields that are not part of the query document.
For example db.c.find(
,
).
This was illegal in 4.2 (the positional projection had to be on a field used in the filter).
This brings the behavior of positional projection and positional update closer together.
Description of Linked Ticket
Using a non-matching subfield (e.g., query: fieldExists.something: 1 projection: fieldExists.fieldDoesntExist.$) with the $ projection operator does not return the Positional projection 'fieldExists.fieldDoesntExist.$' does not match the query document error.
Given the document:
{ "_id" : ObjectId("5cb8ab2f20926051ca9e2cd7"), "AOE" : [ { "areaOfExpertise" : "aoe1", "subAOE" : [] }, { "areaOfExpertise" : "aoe2", "subAOE" : [] } ], "poolName" : "newpool", "__v" : 0 }
The {"AOE.doesntExist.$":1} projection is treated the same as the correct {"AOE.$":1} projection:
> db.proj.find({ poolName: "newpool", "AOE.areaOfExpertise": "aoe1" },{"AOE.doesntExist.$":1}).pretty() { "_id" : ObjectId("5cb8ab2f20926051ca9e2cd7"), "AOE" : [ { "areaOfExpertise" : "aoe1", "subAOE" : [] } ] } > db.proj.find({ poolName: "newpool", "AOE.areaOfExpertise": "aoe1" },{"AOE.$":1}).pretty() { "_id" : ObjectId("5cb8ab2f20926051ca9e2cd7"), "AOE" : [ { "areaOfExpertise" : "aoe1", "subAOE" : [] } ] }
Scope of changes
Impact to Other Docs
MVP (Work and Date)
Resources (Scope or Design Docs, Invision, etc.)
- documents
-
SERVER-40687 Positional projection ($) only considers first path component when comparing to query document
- Closed