TypeMatchExpression::debugString() and TypeMatchExpression::toBSON() produce incorrect output for {$type: "number"} expressions. The former should produce a string containing "type: number", and the latter should produce the BSON object {$type: "number"}.
As a result, explain output for these queries are incorrect:
> db.foo.find({a:{$type:"number"}}).explain()
{
"queryPlanner" : {
"plannerVersion" : 1,
"namespace" : "test.foo",
"indexFilterSet" : false,
"parsedQuery" : {
"a" : {
"$type" : -1414812757
}
},
"winningPlan" : {
"stage" : "EOF"
},
"rejectedPlans" : [ ]
},
"serverInfo" : {
"host" : "rassi",
"port" : 27017,
"version" : "0.0.0",
"gitVersion" : "none"
},
"ok" : 1
}
>
As is the diagnostic log output:
2015-11-06T12:05:16.736-0500 D QUERY [conn1] Beginning planning...
=============================
Options = INDEX_INTERSECTION KEEP_MUTATIONS
Canonical query:
ns=test.fooTree: a type: -1414812757
Sort: {}
Proj: {}
=============================