IDBIndex.unique

La propriété unique, rattachée à l'interface IDBIndex, est un booléen qui indique si l'index utilisé permet d'avoir des clés dupliquées.

Cette caractéristique est décidée lors de la création de l'index, avec la méthode IDBObjectStore.createIndex. Cette méthode prend un paramètre optionnel, unique, qui, s'il vaut true, indique que l'index ne permettra pas d'avoir de clés dupliquées.

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

Syntaxe

js
var myIndex = objectStore.index("index");

Valeur

Un booléen qui vaut true si l'index permet d'avoir des valeurs dupliquées pour une même clé ou false s'il n'est pas possible d'avoir de clés dupliquées.

Exemples

Dans l'exemple suivant, on ouvre une transaction en lecture sur un magasin d'objets puis on récupère l'index lName. On ouvre alors un curseur sur l'index grâce à IDBIndex.openCursor (cela fonctionne de façon analogue à l'ouverture d'un curseur sur le magasin d'objets avec IDBObjectStore.openCursor sauf qu'ici, les enregistrements sont triés selon l'index et pas selon la clé primaire.

On affiche le caractère unique des clé dans la console (ici, on voit que la propriété vaut false).

Enfin, on parcourt chaque enregistrement et on insère les données dans le tableau HTML (pour voir un exemple complet, consulter notre dépôt IDBIndex-example (voir la démonstration live).

js
function displayDataByIndex() {
  tableEntry.innerHTML = "";
  var transaction = db.transaction(["contactsList"], "readonly");
  var objectStore = transaction.objectStore("contactsList");

  var myIndex = objectStore.index("lName");
  console.log(myIndex.unique);

  myIndex.openCursor().onsuccess = function (event) {
    var cursor = event.target.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("Les éléments sont affichés.");
    }
  };
}

Spécifications

Specification
Indexed Database API 3.0
# dom-idbindex-unique

Compatibilité des navigateurs

BCD tables only load in the browser

Voir aussi