| Steps To Reproduce: |
Query:
{
|
"a" : {
|
"$gt" : 5
|
},
|
"b" : {
|
"$lt" : 500
|
},
|
"$or" : [
|
{
|
"startLoc" : {
|
"$geoWithin" : {
|
"$geometry" : {
|
"type" : "MultiPolygon",
|
"coordinates" : [[[[-1,-1],[2,-2],[2,2],[-2,2],[-1,-1]]]]
|
}
|
}
|
}
|
},
|
{
|
"endLoc" : {
|
"$geoWithin" : {
|
"$geometry" : {
|
"type" : "MultiPolygon",
|
"coordinates" : [[[[-1,-1],[2,-2],[2,2],[-2,2],[-1,-1]]]]
|
}
|
}
|
}
|
}
|
]
|
}
|
- Insert a document
db.docs.insert({a: 100, b: 100, startLoc: {type: "Point", coordinates: [0,0]}, endLoc: {type: "Point", coordinates: [1,1]}})
|
- When the indexes are not compound indexes, the query can use the indexes:
db.docs.ensureIndex({startLoc: "2dsphere"})
|
db.docs.ensureIndex({endLoc: "2dsphere"})
|
db.docs.getIndexKeys()
|
db.docs.find({a: {$gt: 5},b: {$lt: 500}, startLoc:{"$geoWithin" : { "$geometry" : { "type" : "MultiPolygon", "coordinates" : [[[[-1,-1],[2,-2],[2,2],[-2,2],[-1,-1]]]]}}} }).explain(true)
|
- When the indexes are compound 2dsphere indexes, the query cannot use the indexes:
db.docs.dropIndexes()
|
db.docs.ensureIndex({startLoc: "2dsphere", a: 1, b: 1})
|
db.docs.ensureIndex({endLoc: "2dsphere", a: 1, b: 1})
|
db.docs.getIndexKeys()
|
db.docs.find({a: {$gt: 5},b: {$lt: 500}, startLoc:{"$geoWithin" : { "$geometry" : { "type" : "MultiPolygon", "coordinates" : [[[[-1,-1],[2,-2],[2,2],[-2,2],[-1,-1]]]]}}} }).explain(true)
|
|