IDBObjectStore
==============

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` (en-US) Read only 

Una lista de los nombres de índices (en-US) en objetos en este almacén de objetos.

`IDBObjectStore.keyPath` (en-US) Read only 

La ruta clave (en-US) 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` (en-US)

El nombre de este almacén de objetos.

`IDBObjectStore.transaction` (en-US) Read only 

El objeto `IDBTransaction` (en-US) al que pertenece este almacén de objetos.

`IDBObjectStore.autoIncrement` (en-US) 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` (en-US) 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()` (en-US)

Crea y devuelve inmediatamente un objeto `IDBRequest` (en-US) 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()` (en-US)

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

`IDBObjectStore.createIndex()` (en-US)

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

`IDBObjectStore.delete()` (en-US)

Devuelve un objeto `IDBRequest` (en-US) 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()` (en-US)

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

`IDBObjectStore.get()` (en-US)

Devuelve un objeto `IDBRequest` (en-US) 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()` (en-US)

Devuelve un objeto `IDBRequest` (en-US) 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()` (en-US)

Devuelve un objeto `IDBRequest` (en-US) 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()` (en-US)

Devuelve un objeto `IDBRequest` (en-US) 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()` (en-US)

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()` (en-US)

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

`IDBObjectStore.openKeyCursor()` (en-US)

Devuelve un objeto `IDBRequest` (en-US) 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()` (en-US)

Devuelve un objeto `IDBRequest` (en-US) 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` (en-US) 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 with JavaScript enabled. Enable JavaScript to view data.

Véase también
-------------

* Uso de IndexedDB
* Iniciando transacciones: `IDBDatabase`
* Uso de transacciones: `IDBTransaction` (en-US)
* Configuración de un rango de claves: `IDBKeyRange` (en-US)
* Recuperar y realizar cambios en sus datos: `IDBObjectStore`
* Uso de cursores: `IDBCursor`
* Ejemplo de referencia: Notificaciones de tareas (Ver el ejemplo en vivo).