Aller au contenu

Index des tableaux et des sous-documents#

Index des tableaux (multi-clés)#

Objectif des index multi-clés#

  • Accélèrent les requêtes sur les éléments de tableaux
  • Créés automatiquement pour les champs de tableaux lors de l'indexation

Commande pour créer un index multi-clés#

  • Utiliser la commande : db.collection.createIndex({field: 1})
  • Exemple : db.products.createIndex({tags: 1})

Recherche dans les tableaux avec des index multi-clés#

  • Opérateurs spécifiques : $all, $elemMatch, $size
  • Exemples:
    • $all : db.products.find({tags: {$all: ["electronics", "computers"]}})
    • $elemMatch : db.students.find({grades: {$elemMatch: {score: {$gt: 90}}}})
    • $size : db.products.find({tags: {$size: 3}})

Limitations des index multi-clés#

  • Ne peuvent pas couvrir plusieurs champs de tableaux dans une seule requête
  • Les index multi-clés à composés sont limités à 31 champs maximum

Index des sous-documents#

Objectif#

  • Améliorer les requêtes sur les sous-documents avec des index
  • Indexer les sous-champs pour optimiser les recherches

Création d'index sur un sous-champ#

  • Commande : db.collection.createIndex({"field.subfield": 1})
  • Exemple : db.users.createIndex({"address.city": 1})

Recherche dans les sous-documents#

  • Notation pointée pour accéder aux sous-champs
  • Exemple
    // Recherche d'utilisateurs par ville :
    db.users.find({"address.city": "New York"})
    
    // Recherche d'utilisateurs par code postal et pays :
    db.users.createIndex({"address.zip": 1, "address.country": 1})
    db.users.find({"address.zip": "12345", "address.country": "USA"})
    

Tri des résultats#

  • Utiliser .sort() avec la notation pointée
  • Exemple : db.users.find().sort({"address.city": 1})

Recherche et requêtes avancées#

Index multi-clés et sous-documents#

  • Index multi-clés pour les requêtes sur les tableaux
  • Notation pointée pour les requêtes sur les sous-documents

Exemples de requêtes avancées#

  • Combinaison de conditions sur un tableau et un sous-document :
db.users.find({tags: "developer", "address.city": "Paris"})
  • Utilisation de $elemMatch pour filtrer sur plusieurs conditions dans un tableau :
db.users.find({hobbies: {$elemMatch: {name: "tennis", skillLevel: {$gte: 3}}}})