Uploaded image for project: 'Core Server'
  1. Core Server
  2. SERVER-47805

Fix validations for sort pattern when the field value is decimal

    XMLWordPrintableJSON

Details

    • Icon: Improvement Improvement
    • Resolution: Unresolved
    • Icon: Major - P3 Major - P3
    • None
    • None
    • None
    • Query Execution
    • Query 2020-05-18

    Description

      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}
      

      Attachments

        Activity

          People

            backlog-query-execution Backlog - Query Execution
            arun.banala@mongodb.com Arun Banala
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated: