Изглежда, че е свързано с поръчката. Ако използвате $geoWithin
и се опитвате да намерите точки вътре в многоъгълник, нещото, което е вътре, е полето, в което търсите. Въпреки това, $geoIntersects
работи в двете посоки, така че можете да търсите точки вътре в многоъгълници или полигони, съдържащи точки, напр.:
db.geom.insert({
"polygons": {
"type":"Polygon",
"coordinates": [[
[ 17.60083012593064, 78.18557739257812],
[ 17.16834652544664, 78.19381713867188],
[ 17.17490690610013, 78.739013671875],
[ 17.613919673106714, 78.73489379882812],
[ 17.60083012593064, 78.18557739257812]
]]
}
});
db.geom.find({
polygons: {
$geoIntersects: {
$geometry: {
"type": "Point",
"coordinates": [17.3734, 78.4738]
}
}
}
});
Също така имайте предвид, че трябва да повторите първата точка на многоъгълника в края. Ако премахнете последната двойка, ще получите $err
:
Заявката не може да се канонизира:грешка на лошата гео заявка с лоша стойност.
Изглежда, че MongoDB ви позволява да вмъквате невалидни геометрии и се оплаква само когато се опитате да добавите индекс на 2dsphere или направите заявка за пресичане/в рамките на/близо, което, предполагам, е разумно, тъй като GeoJSON може да бъде валиден JSON, без да е валидна геометрия.