Parece que tiene que ver con el orden. Si está utilizando $geoWithin
y está tratando de encontrar puntos dentro de un polígono, lo que está dentro es el campo en el que está buscando. Sin embargo, $geoIntersects
funciona en cualquier dirección, por lo que puede buscar puntos dentro de polígonos o polígonos que contengan puntos, por ejemplo:
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]
}
}
}
});
Además, tenga en cuenta que debe repetir el primer punto del polígono al final. Si elimina el par final, obtendrá un $err
:
No se puede canonicalizar la consulta:"Error de consulta geográfica incorrecta de BadValue".
Parece que MongoDB le permite insertar geometrías no válidas y solo se queja cuando intenta agregar un índice de 2dsphere o realiza una consulta de intersección/dentro/cerca, lo cual, supongo, es razonable, ya que GeoJSON puede ser JSON válido sin ser una geometría válida.