Introduction du chapitre
Ce chapitre présente les requêtes géospatiales MongoDB Golang, y compris la façon de stocker des informations de localisation et de faire des requêtes par distance.
Tutoriels préalables
Conseil : Si vous n'êtes pas familier avec la syntaxe des requêtes MongoDB, veuillez d'abord lire le tutoriel MongoDB. La syntaxe d'expression utilisée pour manipuler MongoDB en Golang est la même.
Préparer les données de test
Écrire des données contenant des coordonnées géographiques dans la collection coll
. Le champ location
stocke les coordonnées de latitude et de longitude des magasins.
docs := []interface{}{
bson.D{
{"title", "Poulet Vapeur de Hainan"},
{"location", bson.D{
{"type": "Point"},
{"coordinates": bson.A{116.240015, 39.899617}}
}},
},
bson.D{
{"title", "Porc BBQ de Guangdong"},
{"location", bson.D{
{"type": "Point"},
{"coordinates": bson.A{116.268854, 39.900276}}
}},
},
bson.D{
{"title", "Oie Rôtie de Guangdong"},
{"location", bson.D{
{"type": "Point"},
{"coordinates": bson.A{116.264905, 39.902778}}
}},
},
bson.D{
{"title", "Crêpe de Shanxi"},
{"location", bson.D{
{"type": "Point"},
{"coordinates": bson.A{116.288938, 39.893164}}
}},
},
bson.D{
{"title", "Raviolis de Hangzhou"},
{"location", bson.D{
{"type": "Point"},
{"coordinates": bson.A{116.286191, 39.910415}}
}},
}
}
result, err := coll.InsertMany(context.Background(), docs)
Requête par distance
Utilisez l'opérateur $near
pour implémenter une requête de distance. En supposant que la collection coll
stocke les données des magasins et que le champ location
stocke les coordonnées de chaque magasin, le code suivant interroge le magasin le plus proche de moi (distance minimale de 1000 mètres, distance maximale de 5000 mètres).
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}}}, // Mes coordonnées actuelles
{"$minDistance": 1000}, // Distance minimale
{"$maxDistance": 5000} // Distance maximale
}}
}}}
)
Expression équivalente :
{
location:
{ $near :
{
$geometry: { type: "Point", coordinates: [ -73.9667, 40.78 ] }, // Mes coordonnées
$minDistance: 1000, // Distance minimale
$maxDistance: 5000 // Distance maximale
}
}
}
L'expression est la même que l'expression native MongoDB, la seule différence est de la redécrire en utilisant la structure de données de Golang.