Kapiteleinführung
In diesem Kapitel werden die Golang MongoDB-geografischen Abfragen vorgestellt, einschließlich der Speicherung von Standortinformationen und der Abfrage nach Entfernung.
Vorherige Tutorials
Tipp: Wenn Sie nicht mit der MongoDB-Abfragesyntax vertraut sind, lesen Sie bitte zuerst das MongoDB-Tutorial. Die Ausdruckssyntax, die zur Bedienung von MongoDB in Golang verwendet wird, ist dieselbe.
Testdaten vorbereiten
Schreiben Sie einige Daten mit geografischen Koordinaten in die coll
-Sammlung. Das Feld location
speichert die Breiten- und Längenkoordinaten der Geschäfte.
docs := []interface{}{
bson.D{
{"title", "Hainaner Gedämpftes Huhn"},
{"location", bson.D{
{"type": "Point"},
{"coordinates": bson.A{116.240015, 39.899617}}
}},
},
bson.D{
{"title", "Guangdong BBQ Schweinefleisch"},
{"location", bson.D{
{"type": "Point"},
{"coordinates": bson.A{116.268854, 39.900276}}
}},
},
bson.D{
{"title", "Guangdong Spanferkel"},
{"location", bson.D{
{"type": "Point"},
{"coordinates": bson.A{116.264905, 39.902778}}
}},
},
bson.D{
{"title", "Shanxi Pfannkuchen"},
{"location", bson.D{
{"type": "Point"},
{"coordinates": bson.A{116.288938, 39.893164}}
}},
},
bson.D{
{"title", "Hangzhou Dumplings"},
{"location", bson.D{
{"type": "Point"},
{"coordinates": bson.A{116.286191, 39.910415}}
}},
}
}
result, err := coll.InsertMany(context.Background(), docs)
Nach Entfernung abfragen
Verwenden Sie den $near
-Operator, um eine Abfrage nach Entfernung durchzuführen. Angenommen, die coll
-Sammlung speichert Ladeninformationen und das location
-Feld speichert die Koordinaten jedes Ladens, dann fragt der folgende Code den Laden in meiner Nähe ab (minimale Entfernung 1000 Meter, maximale Entfernung 5000 Meter).
cursor, err := coll.Find(
context.Background(),
bson.D{{"location", bson.D{
{"$near": bson.D{
{"$geometry": bson.D{{"type":"Point"}, {"coordinates": bson.A{116.288938,39.893164}}}, // Meine aktuellen Koordinaten
{"$minDistance": 1000}, // Minimale Entfernung
{"$maxDistance": 5000} // Maximale Entfernung
}}
}}}
)
Äquivalenter Ausdruck:
{
location:
{ $near :
{
$geometry: { type: "Point", coordinates: [ -73.9667, 40.78 ] }, // Meine Koordinaten
$minDistance: 1000, // Minimale Entfernung
$maxDistance: 5000 // Maximale Entfernung
}
}
}
Der Ausdruck entspricht dem nativen MongoDB-Ausdruck, der einzige Unterschied besteht darin, ihn mithilfe der Datenstruktur von Golang neu zu beschreiben.