-
Type:
Bug
-
Resolution: Duplicate
-
Priority:
Major - P3
-
None
-
Affects Version/s: 2.6.1
-
Component/s: Querying
-
None
-
Fully Compatible
-
ALL
-
RPL 0 3/13/15
-
None
-
None
-
None
-
None
-
None
-
None
-
None
I have a collection with documents, which contain a datetime field 'from' (and also 'to', but that was not used in queries) and multiple polygons.
Until Version 2.4.10 I solved that by having an array of geometry subdocuments in "location.geometry".
The index looked like that and worked very well. I had query times of ~50ms
{from:1, 'location.geometry' : '2dsphere'}
Version 2.6 supports MultiPolygons and it seems, that my workaround of manual "multi polygons" does not work anymore. The query times are much slower now.
I converted my polygons to use MultiPolygons in the field "geometry" and now I try to get the queries as fast as in 2.4.
The pure geo query: (on 2.6.1 the geo field name is "geometry")
{
"location.geometry" : {
"$near" : {
"$geometry" : {
"type" : "Point",
"coordinates" : [
13.4059717,
52.5208876
]
},
"$maxDistance" : 1
}
}
}
Both versions return 4599 results.
It's faster on 2.6.1. Here it takes 548 ms against 1691 ms on 2.4.10
But when I query for the date and the location, it get's problematic. The full query is: (on 2.6.1 the geo field name is "geometry")
{
"from" : {
"$gte" : ISODate("2014-06-19T00:00:00Z"),
"$lt" : ISODate("2014-06-20T00:00:00Z")
},
"location.geometry" : {
"$near" : {
"$geometry" : {
"type" : "Point",
"coordinates" : [
13.4059717,
52.5208876
]
},
"$maxDistance" : 1
}
}
}
On 2.4.10 the query takes only 49 ms:
{
"cursor" : "S2NearCursor",
"isMultiKey" : true,
"n" : 55,
"nscannedObjects" : 55,
"nscanned" : 6226,
"nscannedObjectsAllPlans" : 55,
"nscannedAllPlans" : 6226,
"scanAndOrder" : false,
"indexOnly" : false,
"nYields" : 0,
"nChunkSkips" : 0,
"millis" : 49,
"indexBounds" : {
},
"nscanned" : 6226,
"matchTested" : NumberLong(3189),
"geoMatchTested" : NumberLong(56),
"numShells" : NumberLong(2),
"keyGeoSkip" : NumberLong(3027),
"returnSkip" : NumberLong(0),
"btreeDups" : NumberLong(10),
"inAnnulusTested" : NumberLong(56)
}
But on 2.6.1 the query takes ~200ms and the number of results differs a lot:
{
"cursor" : "BtreeCursor from_1_geometry_2dsphere",
"isMultiKey" : true,
"n" : 209,
"nscannedObjects" : 6805,
"nscanned" : 262252,
"nscannedObjectsAllPlans" : 6805,
"nscannedAllPlans" : 262252,
"scanAndOrder" : false,
"indexOnly" : false,
"nYields" : 2048,
"nChunkSkips" : 0,
"millis" : 205,
"indexBounds" : {
"from" : [
[
true,
ISODate("2014-06-20T00:00:00Z")
]
],
"geometry" : [
[
{
"$minElement" : 1
},
{
"$maxElement" : 1
}
]
]
},
"filterSet" : false
}
The indexBounds look a bit strange. If I instead query just for a date (with an index on
{from:1}
the bounds look correct:
"indexBounds" : { "from" : [ [ ISODate("2014-06-19T00:00:00Z"), ISODate("2014-06-20T00:00:00Z") ] ] }
What is the correct way, to index and query a collection for a specific date and geo location?
Or how can I optimize the data structure?
Thanks a lot!
Fabian
- duplicates
-
SERVER-13687 Results of $near query on compound multi-key 2dsphere index not sorted by distance
-
- Closed
-
-
SERVER-17279 Intersect bounds over non-geo field of compound geo index
-
- Closed
-
- is related to
-
SERVER-16042 Optimise $all/$and to select smallest subset as initial index bounds
-
- Closed
-