-
Type: Improvement
-
Resolution: Unresolved
-
Priority: Major - P3
-
None
-
Affects Version/s: None
-
Component/s: None
-
Labels:
-
Query Execution
-
Query 2020-05-18
It look like we don't disallow decimals between 1.0 and 2.0 for sort parameter is find. We also don't use an index to sort for such sort patterns. This seems like a bug.
Note that we also allow and persist any numeric values for an index field.
$ db.c.find().sort({a: 2.0}) Error: error: { "ok" : 0, "errmsg" : "$sort key ordering must be 1 (for ascending) or -1 (for descending)", "code" : 15975, "codeName" : "Location15975" } $ db.c.find().sort({a: 1.9}).explain() { "queryPlanner" : { "plannerVersion" : 1, "namespace" : "test.c", "indexFilterSet" : false, "parsedQuery" : { }, "queryHash" : "3344645B", "planCacheKey" : "3344645B", "winningPlan" : { "stage" : "SORT", "sortPattern" : { "a" : 1 }, "memLimit" : 104857600, "type" : "simple", "inputStage" : { "stage" : "COLLSCAN", "direction" : "forward" } }, "rejectedPlans" : [ ] } } $ db.c.find().sort({a: 1.0}).explain() { "queryPlanner" : { "plannerVersion" : 1, "namespace" : "test.c", "indexFilterSet" : false, "parsedQuery" : { }, "queryHash" : "3344645B", "planCacheKey" : "3344645B", "winningPlan" : { "stage" : "FETCH", "inputStage" : { "stage" : "IXSCAN", "keyPattern" : { "a" : 1 }, "indexName" : "a_1", "isMultiKey" : false, "multiKeyPaths" : { "a" : [ ] }, "isUnique" : false, "isSparse" : false, "isPartial" : false, "indexVersion" : 2, "direction" : "forward", "indexBounds" : { "a" : [ "[MinKey, MaxKey]" ] } } }, "rejectedPlans" : [ ] } }
Additionally the server should also reject the following sort specification objects as invalid:
{"a.": 1}
{$x: 1}
{a: 1, $natural: 1}
- related to
-
SERVER-20048 Server should validate keys in sort specification
- Backlog