Het lijkt met de bestelling te maken te hebben. Als u $geoWithin
. gebruikt en je probeert punten binnen een veelhoek te vinden, het ding dat zich binnenin bevindt, is het veld waarop je zoekt. Echter, $geoIntersects
werkt in beide richtingen, dus u kunt zoeken naar punten binnen polygonen of polygonen die punten bevatten, bijvoorbeeld:
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]
}
}
}
});
Houd er ook rekening mee dat u het eerste punt van de veelhoek aan het einde moet herhalen. Als je het laatste paar verwijdert, krijg je een $err
:
Kan zoekopdracht niet canonicaliseren:fout BadValue slechte geografische zoekopdracht.
Het lijkt erop dat je met MongoDB ongeldige geometrieën kunt invoegen en alleen klaagt wanneer je een 2dsphere-index probeert toe te voegen of een intersects/in/near-query doet, wat, denk ik, redelijk is, aangezien GeoJSON een geldige JSON kan zijn zonder een geldige geometrie te zijn.