Abych byl úplný, toto se ve skutečnosti snažíte udělat:
pipe := DB.C("store").Pipe([]bson.M{
{"$project": bson.M{"location": bson.M{"type": bson.M{"$literal": "Point"}, "coordinates": []interface{}{"$longitude", "$latitude"}}}},
{"$match": bson.M{"location": bson.M{"$geoWithin": bson.M{"$centerSphere": []interface{}{"$coordinates", 10 / 6378.11}}}}},
})
Problém není ve vašem "Point"
doslova, je to jen pouhá náhoda. Pokud jej změníte na "Pt"
například stále uvidíte přesně stejnou chybovou zprávu.
Point
v chybové zprávě odkazuje na $centerSphere
, který očekává středový bod a poloměr. A způsob, jakým se to snažíte „předat“, nefunguje.
Funguje to například:
"$centerSphere": []interface{}{[]interface{}{1.0, 2.0}, 10 / 6378.11}
Váš původní dotaz nedává smysl, protože se snažíte najít dokumenty, kde je poloha v okruhu 10 kilometrů od sebe , což by odpovídalo všem dokumentům.
Místo toho chcete / měli byste se dotazovat na dokumenty, které jsou do 10 kilometrů od konkrétního umístění a souřadnice tohoto konkrétního umístění můžete předat do $centerSphere
:
myLong, myLat := 10.0, 20.0
// ...
"$centerSphere": []interface{}{[]interface{}{myLong, myLat}, 10 / 6378.11}
Úplný dotaz:
myLong, myLat := 10.0, 20.0
pipe := DB.C("store").Pipe([]bson.M{
{"$project": bson.M{"location": bson.M{"type": bson.M{"$literal": "Point"}, "coordinates": []interface{}{"$longitude", "$latitude"}}}},
{"$match": bson.M{"location.coordinates": bson.M{"$geoWithin": bson.M{"$centerSphere": []interface{}{[]interface{}{myLong, myLat}, 10 / 6378.11}}}}},
})