-
Type:
Bug
-
Resolution: Done
-
Priority:
Major - P3
-
None
-
Affects Version/s: 2.6.10, 3.0.5
-
Component/s: Querying, Text Search
-
None
-
Query
-
Fully Compatible
-
ALL
-
None
-
None
-
None
-
None
-
None
-
None
-
None
Both an empty collection and a non-existent collection have no text index. Therefore, I expect their behaviour with respect to $text to be the same. However, the empty collection case returns an error, whereas on a non-existent collection the query apparently "succeeds" (even though it's probably short-circuiting somewhere).
> db.a.drop() false > db.createCollection("a") { "ok" : 1 } > db.a.find( { "$text": { "$search": "foobar" } } ) Error: error: { "$err" : "Unable to execute query: error processing query: ns=test.a limit=0 skip=0\nTree: TEXT : query=foobar, language=, tag=NULL\nSort: {}\nProj: {}\n planner returned error: need exactly one text index for $text query", "code" : 17007 } > db.a.drop() true > db.a.find( { "$text": { "$search": "foobar" } } ) >
In 3.0.5 the explain plan is:
> db.a.find( { "$text": { "$search": "foobar" } } ).explain(true) { "queryPlanner" : { "plannerVersion" : 1, "namespace" : "test.a", "indexFilterSet" : false, "parsedQuery" : { "$text" : { "$search" : "foobar", "$language" : "" } }, "winningPlan" : { "stage" : "EOF" }, "rejectedPlans" : [ ] }, "executionStats" : { "executionSuccess" : true, "nReturned" : 0, "executionTimeMillis" : 0, "totalKeysExamined" : 0, "totalDocsExamined" : 0, "executionStages" : { "stage" : "EOF", "nReturned" : 0, "executionTimeMillisEstimate" : 0, "works" : 1, "advanced" : 0, "needTime" : 0, "needFetch" : 0, "saveState" : 0, "restoreState" : 0, "isEOF" : 1, "invalidates" : 0 }, "allPlansExecution" : [ ] }, "serverInfo" : { "host" : "genique", "port" : 23249, "version" : "3.0.5", "gitVersion" : "8bc4ae20708dbb493cb09338d9e7be6698e4a3a3" }, "ok" : 1 }
In 2.6.10 it is:
> db.a.find( { "$text": { "$search": "foobar" } } ).explain(true) { "cursor" : "BasicCursor", "isMultiKey" : false, "n" : 0, "nscannedObjects" : 0, "nscanned" : 0, "nscannedObjectsAllPlans" : 0, "nscannedAllPlans" : 0, "scanAndOrder" : false, "indexOnly" : false, "nYields" : 0, "nChunkSkips" : 0, "millis" : 0, "allPlans" : [ { "cursor" : "BasicCursor", "n" : 0, "nscannedObjects" : 0, "nscanned" : 0 } ], "server" : "genique:27017"