Es scheint mit der Bestellung zu tun zu haben. Wenn Sie $geoWithin
verwenden und Sie versuchen, Punkte innerhalb eines Polygons zu finden, das Ding, das sich darin befindet, ist das Feld, in dem Sie suchen. Allerdings $geoIntersects
funktioniert in beide Richtungen, sodass Sie nach Punkten innerhalb von Polygonen oder Polygonen, die Punkte enthalten, suchen können, z. B.:
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]
}
}
}
});
Beachten Sie auch, dass Sie den ersten Punkt des Polygons am Ende wiederholen müssen. Wenn Sie das letzte Paar entfernen, erhalten Sie ein $err
:
Abfrage kann nicht kanonisiert werden:BadValue-Fehler bei der Geo-Abfrage.
Es scheint, dass MongoDB Ihnen erlaubt, ungültige Geometrien einzufügen und sich nur beschwert, wenn Sie versuchen, einen 2dsphere-Index hinzuzufügen oder eine Intersects/Within/Near-Abfrage durchzuführen, was meiner Meinung nach vernünftig ist, da GeoJSON gültiges JSON sein kann, ohne eine gültige Geometrie zu sein.