Parece ter a ver com a ordem. Se você estiver usando
$geoWithin
e você está tentando encontrar pontos dentro de um polígono, o que está dentro é o campo que você está procurando. No entanto, $geoIntersects
funciona em qualquer direção, então você pode procurar pontos dentro de polígonos ou polígonos contendo pontos, por exemplo: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]
}
}
}
});
Além disso, observe que você precisa repetir o primeiro ponto do polígono no final. Se você remover o par final, receberá um
$err
:
Não é possível canonizar a consulta:BadValue bad geo query" erro.
Parece que o MongoDB permite inserir geometrias inválidas e só reclama quando você tenta adicionar um índice 2dsphere ou faz uma consulta de interseção/dentro/perto, o que, suponho, é razoável, pois GeoJSON pode ser um JSON válido sem ser uma geometria válida.