У меня есть коллекция документов, подобная следующей:
{
"_id" : ObjectId("5bc15f23d672e9086ca4fbac"),
"Location" : {
"GeoJson" : {
"type" : "Point",
"coordinates" : [14.4199254356, 50.0700249768]
}
}
И у меня есть индекс, созданный следующим образом
{ Location.GeoJson2dsphere : "2dsphere" }
А теперь проблема, когда я использую $polygon
для поиска, у меня есть результаты, но запрос не использует индекс, поэтому он медленный. Вот запрос
.find({"Location.GeoJson" : {
"$geoWithin" : {
"$polygon" : [
[14.4182910543168, 50.0891393887804],
[14.4491901021683, 50.0891393887804],
[14.4491901021683, 50.0671069088523],
[14.4182910543168, 50.0671069088523]
]
}
}
})
Но когда я вместо этого использую $ Geometry, он использует индекс.
.find({"Location.GeoJson" : {
"$geoWithin" :
{"$geometry" :
{"type" : "Polygon",
"coordinates" : [[
[14.4182910543168, 50.0891393887804],
[14.4491901021683, 50.0891393887804],
[14.4491901021683, 50.0671069088523],
[14.4182910543168, 50.0671069088523],
[14.4182910543168, 50.0891393887804]
]]
}}
}})
Есть ли причина, по которой первый запрос не использует индекс? Руководство Монго ничего не говорит об этом.
Можете ли вы указать мне, что делать, чтобы использовать $ polygon для поиска по индексу, или мне нужно переписать все запросы в моем приложении, чтобы использовать $ geometry. Я использую драйвер C #, где синтаксис выглядит следующим образом:
Builders<Offer>.Filter.GeoWithinPolygon(a => a.Location.GeoJson, polygon);
Однако, это производит первый запрос, который не использует индекс.