Latest web development tutorials

MongoDB indexation avancée

Prenons le document suivant collections (utilisateurs):

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

Le document ci-dessus contient des sous-documents, et de traiter un tableau de balises.


champ tableau indexé

Supposons que nous mettons à l'étiquette basée sur l'utilisateur, pour lesquels nous avons besoin d'indexer la collection des balises de tableau.

Créer un index dans le tableau, le tableau des besoins pour chaque champ à son tour indexé. Ainsi, lorsque nous créons un index pour les balises de tableau, il fournira la musique, le cricket, blogs trois valeurs pour établir un index séparé.

Créer un index de tableau, utilisez la commande suivante:

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

Après la création de l'index, nous pouvons récupérer la collection de champs de tags:

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

Nous avons utilisé pour vérifier l'utilisation de l'index, vous pouvez utiliser la commande expliquer:

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

Les résultats de la commande ci-dessus affichera "curseur": "BtreeCursor tags_1", il a dit l'indice a été utilisé.


champ sous-documents Index

Supposons que nous avons besoin de la ville, l'état, le champ de code PIN pour récupérer des documents, que ces champs sont des champs sous-document, nous avons donc besoin d'une indexation de sous-document.

Créer un index pour les trois sous-champs du document, la commande est la suivante:

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

Une fois que l'index est créé, nous pouvons utiliser le terrain pour récupérer les sous-documents de données:

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

Rappelez-vous l'expression de requête doit suivre l'ordre de l'index spécifié. Ainsi, l'index créé ci-dessus soutiendra la requête suivante:

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

Il supporte également la requête suivante:

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