我正在运行不同的查询:
按geoJsonExtent过滤,它是一个5点的多边形。
db.Zone.find({
"geoJsonExtent": { "$geoIntersects": { "$geometry": { "type": "Point", "coordinates": [ -103.342280, 20.671379 ] } } }
}).explain("executionStats");
"executionSuccess" : true,
"executionTimeMillis" : 0,
"nReturned" : 7,
"totalDocsExamined" : 10,
"totalKeysExamined" : 19
通过geoJson过滤,它是一个多点,有n个点(数百个)。
db.Zone.find({
"geoJson": { "$geoIntersects": { "$geometry": { "type": "Point", "coordinates": [ -103.342280, 20.671379 ] } } },
}).explain("executionStats");
"executionSuccess" : true,
"executionTimeMillis" : 2,
"nReturned" : 4,
"totalDocsExamined" : 6,
"totalKeysExamined" : 16
使用和运算符对两个查询进行过滤。
db.Zone.find({
"geoJsonExtent": { "$geoIntersects": { "$geometry": { "type": "Point", "coordinates": [ -103.342280, 20.671379 ] } } },
"geoJson": { "$geoIntersects": { "$geometry": { "type": "Point", "coordinates": [ -103.342280, 20.671379 ] } } },
}).explain("executionStats");
"executionSuccess" : true,
"executionTimeMillis" : 22,
"nReturned" : 4,
"totalDocsExamined" : 6,
"totalKeysExamined" : 16
我有geoJson和geoJsonExtent的2dsphere索引。
最后一个查询是最慢的(22ms),但$和运算符使用短路评估,因此最后一个查询必须比第二个查询更快,因为de first first几乎是立即的。
有人知道为什么会这样吗?