Indexation avancée
Considérons la collection de documents suivante (users) :
{
"address": {
"city": "Los Angeles",
"state": "California",
"pincode": "123"
},
"tags": [
"music",
"cricket",
"blogs"
],
"name": "Tom Benzamin"
}
Les documents ci-dessus contiennent un sous-document address et un tableau tags.
Indexer les champs de tableau
Supposons que nous récupérions des utilisateurs en fonction des tags. Pour cela, nous devons créer un index sur le tableau tags dans la collection.
La création d'un index sur un tableau nécessite de construire un index pour chaque champ du tableau séquentiellement. Ainsi, lorsque nous créons un index sur le tableau tags, des index séparés seront créés pour les trois valeurs : music, cricket et blogs.
Utilisez la commande suivante pour créer un index sur un tableau :
>db.users.ensureIndex({"tags":1})
Après avoir créé l'index, nous pouvons récupérer le champ tags de la collection comme ceci :
>db.users.find({tags:"cricket"})
Pour vérifier que nous avons utilisé l'index, nous pouvons utiliser la commande explain :
>db.users.find({tags:"cricket"}).explain()
Si le résultat d'exécution de la commande ci-dessus affiche "cursor": "BtreeCursor tags_1", cela signifie que l'index a été utilisé.
Indexer les champs de sous-document
Supposons que nous devions récupérer des documents par les champs city, state et pincode. Comme ces champs sont des champs de sous-document, nous devons créer un index sur le sous-document.
Créez un index sur 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éé, nous pouvons utiliser les champs du sous-document pour récupérer des données :
>db.users.find({"address.city":"Los Angeles"})
L'expression de requête ne suit pas nécessairement l'ordre de l'index spécifié ; MongoDB l'optimisera automatiquement. Ainsi, l'index créé ci-dessus prendra en charge les requêtes suivantes :
>db.users.find({"address.state":"California","address.city":"Los Angeles"})
Il prend également en charge les requêtes suivantes :
>db.users.find({"address.city":"Los Angeles","address.state":"California","address.pincode":"123"})
Autres extensions