MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

$wörtliche Verwendung in Golang-mgo

Um vollständig zu sein, versuchen Sie Folgendes:

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}}}}},
})

Das Problem liegt nicht bei Ihrem "Point" wörtlich, es ist nur ein Zufall. Wenn Sie es zu "Pt" ändern Beispielsweise sehen Sie immer noch genau dieselbe Fehlermeldung.

Der Point in der Fehlermeldung bezieht sich auf $centerSphere , die einen zentralen Punkt erwartet und einen Radius. Und so wie du versuchst zu "bestehen" funktioniert es nicht.

Das funktioniert zum Beispiel:

"$centerSphere": []interface{}{[]interface{}{1.0, 2.0}, 10 / 6378.11}

Ihre ursprüngliche Anfrage ergibt keinen Sinn, da Sie versuchen, Dokumente zu finden, bei denen der Standort weniger als 10 Kilometer von selbst entfernt ist , was mit allen Dokumenten übereinstimmen würde.

Stattdessen wollen/sollten Sie Dokumente abfragen, die sich im Umkreis von 10 Kilometern um einen bestimmten befinden Standort, und Sie können die Koordinaten dieses bestimmten Standorts an $centerSphere übergeben :

myLong, myLat := 10.0, 20.0

// ...

"$centerSphere": []interface{}{[]interface{}{myLong, myLat}, 10 / 6378.11}

Die vollständige Abfrage:

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}}}}},
})