MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Créer un index géospatial 2dsphere pour les requêtes sphériques dans MongoDB

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