Zdá se, že to souvisí s objednávkou. Pokud používáte $geoWithin
a snažíte se najít body uvnitř mnohoúhelníku, věc, která je uvnitř, je pole, na kterém hledáte. Nicméně $geoIntersects
funguje v obou směrech, takže můžete hledat body uvnitř polygonů nebo polygony obsahující body, např.:
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]
}
}
}
});
Všimněte si také, že na konci musíte opakovat první bod mnohoúhelníku. Pokud odstraníte poslední pár, dostanete $err
:
Nelze kanonizovat dotaz:Chyba BadValue bad geo query.
Zdá se, že MongoDB vám umožňuje vkládat neplatné geometrie a stěžuje si pouze tehdy, když se pokusíte přidat index 2dsphere nebo provedete dotaz protínající/uvnitř/blízko, což je, myslím, rozumné, protože GeoJSON může být platný JSON, aniž by to byla platná geometrie.