es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

IndexedDB: Error de Esquema al intentar acceder a un objeto anidado dentro de una tabla.

Tengo una IndexedDB llamada pos y dentro de esa tabla llamada pos_customers. La estructura se ve como https://imgur.com/e9ZrxVm

Ahora mi objetivo es acceder al teléfono que está dentro del objeto de facturación. Si observas detenidamente, el objeto de facturación está anidado. Entonces, para acceder a eso, escribí este código:

if (search) {
  database.table('pos_customers').where("first_name")
  .startsWithIgnoreCase(search)
  .or('email').startsWithIgnoreCase(search)
  .or('billing.phone').startsWithIgnoreCase(search) //lanza un error de SchemaError
  .toArray().then((data) => {
    data.forEach(info => {
      for(let key in info) {
        console.log(`${key} ${info.email} ${info.billing.phone}`); //esto funcionará obviamente
      }
    })
  });
}

La advertencia que me mostró:

Unhandled rejection: SchemaError: KeyPath billing.phone en el objeto almacen pos_customers no está indexado.

Sí, soy nuevo en Dexie y he leído muchas respuestas en StackOverflow, pero no pude encontrar nada específico buscando objetos anidados de Dexie.

Gracias de antemano.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error indica que la ruta de acceso “billing.phone” no está indexada en el objeto de almacenamiento “pos_customers”. Para solucionar esto, deberás modificar el esquema de la base de datos para agregar un índice para la ruta de acceso “billing.phone”.

    Aquí hay un ejemplo de cómo crear un índice para “billing.phone” utilizando Dexie:

    const database = new Dexie('pos');
    database.version(1).stores({
      pos_customers: '++id, first_name, email, billing.phone',
    });
    

    En este ejemplo, estamos creando una nueva versión del esquema de la base de datos con un nuevo índice para la ruta de acceso “billing.phone”. La sintaxis “++id” indica que queremos generar automáticamente identificadores únicos para cada registro.

    Después de modificar el esquema, deberías poder utilizar la ruta de acceso “billing.phone” en tu consulta sin encontrar el error de esquema.

Comments are closed.