MongoDB fournit les types d'index géospatiaux suivants qui prennent en charge les requêtes géospatiales.
- Les index 2D prennent en charge les requêtes qui calculent des géométries sur un plan bidimensionnel.
2dsphere
les index prennent en charge les requêtes qui calculent les géométries sur une sphère semblable à la Terre.
Dans cet article, je crée une 2dsphere
indice.
Exemple de collecte
Supposons que nous ayons une collection appelée bars
avec les documents suivants :
{ "_id" : 1, "name" : "Boardwalk Social", "location" : { "type" : "Point", "coordinates" : [ 145.77675259719823, -16.919297718553366 ] } } { "_id" : 2, "name" : "The Downunder Bar", "location" : { "type" : "Point", "coordinates" : [ 145.77621640842125, -16.92107838010542 ] } } { "_id" : 3, "name" : "Riley", "location" : { "type" : "Point", "coordinates" : [ 145.7739955395154, -16.916028253292883 ] } } { "_id" : 4, "name" : "Salt House", "location" : { "type" : "Point", "coordinates" : [ 145.78148426655065, -16.91823513430776 ] } } { "_id" : 5, "name" : "Rattle n Hum", "location" : { "type" : "Point", "coordinates" : [ 145.77746095331537, -16.920051942529685 ] } }
Chaque document contient des informations de localisation stockées sous forme d'objet GeoJSON.
Un objet GeoJSON a un champ nommé type
qui spécifie le type d'objet GeoJSON et un champ nommé coordinates
qui spécifie les coordonnées de l'objet.
Créer l'index 2dsphere
Créons maintenant la 2dsphere
indice.
db.bars.createIndex( { location : "2dsphere" } )
Sortie :
{ "createdCollectionAutomatically" : false, "numIndexesBefore" : 1, "numIndexesAfter" : 2, "ok" : 1 }
La 2dsphere
l'index a maintenant été créé.
Nous pouvons maintenant utiliser le getIndexes()
méthode pour vérifier notre index :
db.bars.getIndexes()
Résultat :
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" }, { "v" : 2, "key" : { "location" : "2dsphere" }, "name" : "location_2dsphere", "2dsphereIndexVersion" : 3 } ]
Nous pouvons voir que l'index a été créé en tant que 2dsphere
index, en utilisant 2dsphereIndexVersion
de 3
, qui est la version par défaut de mon installation actuelle de MongoDB (4.4).
Créer un index 2dsphere composé
Vous pouvez inclure 2dsphere
clés d'index dans les index composés qui sont combinées avec des clés d'index non géospatiales.
Par exemple, nous aurions pu combiner notre location
champ avec le name
champ pour créer un index composé.
Supprimons l'index et créons un index composé :
db.bars.dropIndex("location_2dsphere")
db.bars.createIndex( { location : "2dsphere", name : 1 } )
Sortie :
{ "createdCollectionAutomatically" : false, "numIndexesBefore" : 1, "numIndexesAfter" : 2, "ok" : 1 }
Et vérifiez l'index :
db.bars.getIndexes()
Résultat :
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" }, { "v" : 2, "key" : { "location" : "2dsphere", "name" : 1 }, "name" : "location_2dsphere_name_1", "2dsphereIndexVersion" : 3 } ]
Composé 2dsphere
les index peuvent référencer plusieurs champs d'emplacement et de non-emplacement. Ceci est en contraste avec le composé 2d
index, qui se limitent à référencer un seul champ de localisation et un autre champ.
Changement de 2dsphereIndexVersion
Vous pouvez modifier le 2dsphereIndexVersion
en l'ajoutant comme champ avec la valeur souhaitée lors de la création de l'index.
Exemple :
db.bars.createIndex(
{ location : "2dsphere" },
{ "2dsphereIndexVersion" : 2 }
)
Sortie :
{ "createdCollectionAutomatically" : false, "numIndexesBefore" : 1, "numIndexesAfter" : 2, "ok" : 1 }
Vérifiez l'index :
db.bars.getIndexes()
Résultat :
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" }, { "v" : 2, "key" : { "location" : "2dsphere" }, "name" : "location_2dsphere", "2dsphereIndexVersion" : 2 } ]
Cet index a été créé en tant que 2dsphere
indexer la version 2.
La version 2 est la version par défaut de 2dsphere
index créés dans les séries MongoDB 2.6 et 3.0.
La version 3 est la version par défaut de 2dsphere
index créés dans MongoDB 3.2 et versions ultérieures (au moment de la rédaction).
Lorsque j'ai créé l'index sans spécifier le 2dsphereIndexVersion
champ, il a créé l'index en utilisant la version 3, car c'est la version par défaut pour ma version MongoDB (4.4).