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.
2dsphereles 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).