IDBObjectStore

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2021.

La interfaz IDBObjectStore de la API de IndexedDB representa un almacén de objetos en una base de datos. Los registros dentro de un almacén de objetos se ordenan según sus claves. Esta clasificación permite una rápida inserción, búsqueda y recuperación ordenada.

Nota: Esta característica está disponible en Web Workers.

Propiedades de instancia

IDBObjectStore.indexNames Read only

Una lista de los nombres de índices en objetos en este almacén de objetos.

IDBObjectStore.keyPath Read only

La ruta clave de este almacén de objetos. Si este atributo es null, la aplicación debe proporcionar una clave para cada operación de modificación.

IDBObjectStore.name

El nombre de este almacén de objetos.

IDBObjectStore.transaction Read only

El objeto IDBTransaction al que pertenece este almacén de objetos.

IDBObjectStore.autoIncrement Read only

El valor del indicador de incremento automático para este almacén de objetos.

Métodos de instancia

IDBObjectStore.add()

Devuelve un objeto IDBRequest y, en un subproceso separado, crea un clon estructurado de value, y almacena el valor clonado en el almacén de objetos. Esto es para agregar nuevos registros a un almacén de objetos.

IDBObjectStore.clear()

Crea y devuelve inmediatamente un objeto IDBRequest y borra este almacén de objetos en un subproceso separado. Esto es para eliminar todos los registros actuales de un almacén de objetos.

IDBObjectStore.count()

Devuelve un objeto IDBRequest y, en un subproceso separado, devuelve el número total de registros que coinciden con la clave proporcionada o IDBKeyRange. Si no se proporcionan argumentos, devuelve el número total de registros en el almacén.

IDBObjectStore.createIndex()

Crea un nuevo índice durante una actualización de versión y devuelve un nuevo objeto IDBIndex en la base de datos conectada.

IDBObjectStore.delete()

Devuelve un objeto IDBRequest y, en un subproceso separado, elimina el almacen de objetos seleccionado por la clave especificada. Esto es para eliminar registros individuales de un almacén de objetos.

IDBObjectStore.deleteIndex()

Destruye el índice especificado en la base de datos conectada, utilizado durante una actualización de versión.

IDBObjectStore.get()

Devuelve un objeto IDBRequest y, en un subproceso separado, devuelve el almacén de objetos seleccionado por la clave especificada. Esto es para recuperar registros específicos de un almacén de objetos.

IDBObjectStore.getKey()

Devuelve un objeto IDBRequest y, en un subproceso separado, recupera y devuelve la clave de registro del objeto en el almacen de objetos que coincide con el parámetro especificado.

IDBObjectStore.getAll()

Devuelve un objeto IDBRequest recupera todos los objetos en el almacén de objetos que coincidan con el parámetro especificado o todos los objetos en el almacén si no se proporcionan parámetros.

IDBObjectStore.getAllKeys()

Devuelve un objeto IDBRequest recupera claves de registro para todos los objetos en el almacén de objetos que coincidan con el parámetro especificado o todos los objetos en el almacén si no se proporcionan parámetros.

IDBObjectStore.index()

Abre un índice de este almacén de objetos después del cual puede, por ejemplo, usarse para devolver una secuencia de registros ordenados por ese índice usando un cursor.

IDBObjectStore.openCursor()

Devuelve un objeto IDBRequest y, en un subproceso separado, devuelve un nuevo objeto IDBCursorWithValue. Se utiliza para iterar a través de un almacén de objetos por clave principal con un cursor.

IDBObjectStore.openKeyCursor()

Devuelve un objeto IDBRequest y, en un subproceso separado, devuelve un nuevo IDBCursor. Se utiliza para iterar a través de un almacén de objetos con una clave.

IDBObjectStore.put()

Devuelve un objeto IDBRequest y, en un subproceso separado, crea un clon estructurado de value, y almacena el valor clonado en el almacén de objetos. Esto es para actualizar los registros existentes en un almacén de objetos cuando el modo de transacción es readwrite.

Ejemplo

Este ejemplo muestra una variedad de usos diferentes de los almacenes de objetos, desde actualizar la estructura de datos con IDBObjectStore.createIndex dentro de una función onupgradeneeded, hasta agregar un nuevo elemento a nuestro almacén de objetos con IDBObjectStore.add. Para ver un ejemplo funcional completo, consulte nuestra aplicación Notificaciones de tareas (ver ejemplo en vivo).

js
// Abramos nuestra base de datos
const DBOpenRequest = window.indexedDB.open("toDoList", 4);

DBOpenRequest.onsuccess = (event) => {
  note.innerHTML += "<li>Database initialized.</li>";

  // Almacenar el resultado de abrir la base de datos en db.
  db = DBOpenRequest.result;
};

// Este evento maneja el evento por el cual se necesita crear
// una nueva versión de la base de datos. O no se ha creado antes,
// o se ha enviado un nuevo número de versión a través de la línea
// window.indexedDB.open anterior.
DBOpenRequest.onupgradeneeded = (event) => {
  const db = event.target.result;

  db.onerror = (event) => {
    note.innerHTML += "<li>Error loading database.</li>";
  };

  // Crear un objectStore para esta base de datos

  const objectStore = db.createObjectStore("toDoList", {
    keyPath: "taskTitle",
  });

  // definir qué elementos de datos contendrá el objectStore

  objectStore.createIndex("hours", "hours", { unique: false });
  objectStore.createIndex("minutes", "minutes", { unique: false });
  objectStore.createIndex("day", "day", { unique: false });
  objectStore.createIndex("month", "month", { unique: false });
  objectStore.createIndex("year", "year", { unique: false });

  objectStore.createIndex("notified", "notified", { unique: false });

  note.innerHTML += "<li>Object store created.</li>";
};

// Crear un nuevo elemento para agregar al almacen de objetos
const newItem = [
  {
    taskTitle: "Walk dog",
    hours: 19,
    minutes: 30,
    day: 24,
    month: "December",
    year: 2013,
    notified: "no",
  },
];

// abra una transacción de base de datos de lectura/escritura,
// lista para agregar los datos
const transaction = db.transaction(["toDoList"], "readwrite");

// informe sobre el éxito de la transacción completa, cuando todo esté hecho
transaction.oncomplete = (event) => {
  note.innerHTML += "<li>Transaction completed.</li>";
};

transaction.onerror = (event) => {
  note.innerHTML +=
    "<li>Transaction not opened due to error. Duplicate items not allowed.</li>";
};

// crear un almacén de objetos en la transacción
const objectStore = transaction.objectStore("toDoList");
// haga una solicitud para agregar nuestro objeto newItem al almacén de objetos
const objectStoreRequest = objectStore.add(newItem[0]);

objectStoreRequest.onsuccess = (event) => {
  note.innerHTML += "<li>Request successful .</li>";
};

Especificaciones

Specification
Indexed Database API 3.0
# object-store-interface

Compatibilidad con navegadores

BCD tables only load in the browser

Véase también