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.