IDBIndex

Cet article nécessite une relecture technique. Voici comment vous pouvez aider.

Cet article nécessite une relecture rédactionnelle. Voici comment vous pouvez aider.

L'interface IDBIndexde l'API IndexedDB est un accès à un index d'un magasins d'objet. Un index permet de trier les enregistrements d'un magasin d'objet sur une autre clé que la clé primaire.

Un index contient des enregistrements persistent. Chaque enregistrement est composé d'une clé ( la valeur du chemin de clé) et d'une valeur (la clé primaire de l'enregistrement dans le magasin d'objet). Les enregistrements de l'index se mettent automatiquement à jour lorsque un enregistrement du magasin d'objet est ajouté , mise à jour ou supprimé. Chaque enregistrement de l'index ne peut référer qu'a un enregistrement du magasin d'objet. Un magasin d'objet peut avoir plusieurs index et lorsque le magasin d'objet change tout les index sont mis à jour automatiquement.

On peut retrouver les enregistrement sur une partie des clés, voir intervalle de clé.

Note : Cette fonctionnalité est disponible via les Web Workers.

Méthodes

Hérite de: EventTarget

IDBIndex.count()
Fait un reqette sur l'index. La requête compte le nombre d'enregistrements dans cet index ou sur l'intervalle de clé passé en paramètre.
IDBIndex.get()
Fait une requete pour renvoyer le premier enregistrement correspondant à la clé ou l'IDBKeyRange du magasin d'objet suivant l'index.
IDBIndex.getKey()
fait une requête pour renvoyer la clé primaire correspondant à la clé ou à l'intervalle de clé de l'index. Si une clé est trouvé le résultat de la requête contiendra seulement la clé primaire de l'enregistrement et non l'enregistrement comme le fait IDBIndex.get.
IDBIndex.getAll()
Fait une requête qui renvoie un tableau ordonné suivant les clés, des clones structurés des enregistrements de l'index relié. On peut limité le nombre d'enregistrements en les filtrants suivant leurs clés ou en paramétrant le compteur.
IDBIndex.getAllKeys()
Ferrais une requête qui renverrait la liste de toutes les clés des enregistrements de l'index. On pourrait limiter le nombre d'enregistrements en les filtrants suivant leurs clés ou en paramétrant le compteur.
IDBIndex.openCursor()
Fait une requête récursive suivant un curseur avec valeur qui itère l'index relié sur l'intervalle de clé spécifié.
IDBIndex.openKeyCursor()
Fait une requête récursive suivant un curseur qui itère l'index relié sur l'intervalle de clé spécifié.

Propriétés

IDBIndex.isAutoLocale Lecture seule
Renvoie un booléen indiquant si la valeur de locale à été paramétré sur auto lors de la mise en place de l'index (voir les paramètres IDBObjectStore.createIndex).
IDBIndex.locale Lecture seule
Renvoie la localisation de l'index (par exemple fr, ou en-US) si la localisation à été spécifie lors de la mise en place de l'index (voir les paramètres IDBObjectStore.createIndex).
IDBIndex.name Lecture seule
Renvoie le nom de l'index.
IDBIndex.objectStore Lecture seule
Renvoie un accès au magasin d'objet que référence l'index.
IDBIndex.keyPath Lecture seule
Renvoie le chemin de clé de l'index. Si l'index n'est pas automatiquement mise à jour la propriété vaux null.
IDBIndex.multiEntry Lecture seule
Renvoie un booléen qui indique comment l'index gère le chemin de clé si c'est un tableau.
IDBIndex.unique Lecture seule
Renvoie un booléen qui indique l'index interdit la duplication d'enregistrement sur sa clé.

Exemple

Dans l'exemple suivant on ouvre une transaction puis un magasin d'objet et enfin l'index lName.

Finalement, On itère sur tous les enregistrements pour en insérer les données dans un tableau HTML. En utilisant la méthode IDBIndex.openCursor qui travaille de la même façon que la méthode IDBObjectStore.openCursor de l'accès au magasin d'objet sauf que les enregistrements sont renvoyés dans l'ordre de l'index et non celui du magasin d'objet.

function displayDataByIndex() {
  tableEntry.innerHTML = '';
  
  //ouvre un transaction
  var transaction = db.transaction(['contactsList'], 'readonly');
  //accés au magasin d'objet
  var objectStore = transaction.objectStore('contactsList');
  
  //on récupère l'index
  var myIndex = objectStore.index('lName'); 

  //un curseur qui itère sur l'index
  var request = myIndex.openCursor();
  request.onsuccess = function(event) {
    var cursor = request.result;
    if(cursor) {
      var tableRow = document.createElement('tr');
      tableRow.innerHTML =   '<td>' + cursor.value.id + '</td>'
                           + '<td>' + cursor.value.lName + '</td>'
                           + '<td>' + cursor.value.fName + '</td>'
                           + '<td>' + cursor.value.jTitle + '</td>'
                           + '<td>' + cursor.value.company + '</td>'
                           + '<td>' + cursor.value.eMail + '</td>'
                           + '<td>' + cursor.value.phone + '</td>'
                           + '<td>' + cursor.value.age + '</td>';
      tableEntry.appendChild(tableRow);  

      cursor.continue();
    } else {
      console.log('Tous les enregistrements ont été affichés.');    
    }
  };
};

Pour un exemple de travail complet, voir notre To-do Notifications app (view example live).

Spécification

Spécification Statut Commentaire
Indexed Database API
La définition de 'IDBIndex' dans cette spécification.
Recommendation  

Compatibilité avec les navigateurs

Fonctionnalité Chrome Firefox (Gecko) Internet Explorer Opera Safari (WebKit)
Support basique 23.0webkit
24.0
10 moz
16.0 (16.0)
10, en partie 15 7.1
count() 23.0 22.0 (22.0) 10, en partie 15 7.1
getAll() et getAllKeys() 48.0 24.0 (24.0)
behind dom.indexedDB.experimental  pref
Pas de support Pas de support Pas de support
Disponible dans workers (Oui) 37.0 (37.0) ? (Oui) ?
isAutoLocale et locale Pas de support

43.0 (43.0)
behind dom.indexedDB.experimental  pref

Pas de support Pas de support Pas de support
Fonctionnalité Android Android Webview Firefox Mobile (Gecko) Firefox OS IE Phone Opera Mobile Safari Mobile Chrome for Android
Support basique 4.4 (Oui) 22.0 (22.0) 1.0.1 10 22 Pas de support (Oui)
count() 4.4 (Oui) 22.0 (22.0) 1.0.1 10 22 Pas de support (Oui)
getAll() et getAllKeys() Pas de support 48.0 24.0 (24.0)
avec dom.indexedDB.experimental  activer
1.1 avec
dom.indexedDB.experimental  avtivé
Pas de support Pas de support Pas de support 48.0
Disponible dans workers (Oui) (Oui) 37.0 (37.0) (Oui) ? (Oui) ? (Oui)
isAutoLocale et locale Pas de support Pas de support 43.0 (43.0)
avec dom.indexedDB.experimental  activé
2.5
avec dom.indexedDB.experimental  activé
Pas de support Pas de support Pas de support Pas de support

Voir aussi

Étiquettes et contributeurs liés au document

 Contributeurs à cette page : gadgino, jpmedley
 Dernière mise à jour par : gadgino,