Tutoriel MongoD...login
Tutoriel MongoDB
auteur:php.cn  temps de mise à jour:2022-04-21 17:49:03

Indexation avancée MongoDB


Considérez l'ensemble de documents suivant (utilisateurs) :

{
   "address": {
      "city": "Los Angeles",
      "state": "California",
      "pincode": "123"
   },
   "tags": [
      "music",
      "cricket",
      "blogs"
   ],
   "name": "Tom Benzamin"
}

Le document ci-dessus contient le sous-document d'adresse et le tableau de balises.


Champ de tableau d'indexation

Supposons que nous récupérions des utilisateurs en fonction de balises, pour cela, nous devons indexer les balises de tableau de la collection.

Pour créer un index dans un tableau, vous devez indexer tour à tour chaque champ du tableau. Ainsi, lorsque nous créons un index pour les balises du tableau, nous créerons des index distincts pour les trois valeurs : musique, cricket et blogs.

Créez un index de tableau en utilisant la commande suivante :

>db.users.ensureIndex({"tags":1})

Après avoir créé l'index, on peut récupérer le champ tags de la collection comme ceci :

>db.users.find({tags:"cricket"})

Pour vérifier que nous utilisez l'index, nous pouvons utiliser la commande expliquer :

>db.users.find({tags:"cricket"}).explain()

Le résultat de l'exécution de la commande ci-dessus affichera "cursor" : "BtreeCursor tags_1", ce qui signifie que l'index a été utilisé.


Indexer les champs des sous-documents

Supposons que nous devions récupérer des documents via les champs de ville, d'état et de code PIN. Puisque ces champs sont des champs de sous-documents, nous devons indexer. les sous-documents.

Créez un index pour les trois champs du sous-document avec la commande suivante :

>db.users.ensureIndex({"address.city":1,"address.state":1,"address.pincode":1})

Une fois l'index créé, on peut utiliser les champs du sous-document pour récupérer des données :

>db.users.find({"address.city":"Los Angeles"})

N'oubliez pas que les expressions de requête doivent suivre l'ordre de l'index spécifié. Ainsi, l'index créé ci-dessus prendra en charge la requête suivante :

>db.users.find({"address.city":"Los Angeles","address.state":"California"})

Prend également en charge la requête suivante :

>db.users.find({"address.city":"LosAngeles","address.state":"California","address.pincode":"123"})

Site Web PHP chinois