Det verkar ha med beställningen att göra. Om du använder $geoWithin
och du försöker hitta punkter inuti en polygon, det som finns inom är fältet du söker på. Men $geoIntersects
fungerar i båda riktningarna, så du kan söka efter punkter inuti polygoner eller polygoner som innehåller punkter, t.ex.:
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]
}
}
}
});
Observera också att du måste upprepa den första punkten i polygonen i slutet. Om du tar bort det sista paret får du en $err
:
Kan inte kanonisera frågan:BadValue bad geo query"-fel.
Det verkar som att MongoDB tillåter dig att infoga ogiltiga geometrier och klagar bara när du försöker lägga till ett 2dsphere-index eller gör en intersects/within/near-fråga, vilket jag antar är rimligt, eftersom GeoJSON kan vara giltig JSON utan att vara en giltig geometri.