Tengo un IndexedDB llamado pos y dentro de esa tabla llamado pos_customers. La estructura se parece a https://imgur.com/e9ZrxVm
Ahora mi objetivo es acceder al teléfono que está dentro del objeto de facturación. Si observa 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) //throws SchemaError .toArray().then( (data) => { data.forEach(info => { for(let key in info) { console.log(`${key} ${info.email} ${info.billing.phone}`); //this will work obviously } } )} );La advertencia que me mostró:
Unhandled rejection: SchemaError: KeyPath billing.phone on object store pos_customers is not indexed.Sí, soy nuevo en Dexie y leí muchas respuestas de StackOverflow, pero no pude obtener nada específico buscando objetos anidados de Dexie.
Gracias de antemano
Encontré una manera de hacer esto:
Primero, asegúrese de que el campo al que intenta acceder esté indexado correctamente: (Aquí billing.phone)
const tables = { pos_customers: 'id,first_name,last_name,email,username,billing,billing.phone,shipping,avatar_url,is_true' }Ahora, asegúrese de actualizar la versión incrementando el valor de la versión en +1.
database.version(2).stores( applyFilters( DATABASE_ADD_TABLES_FILTER, tables ) ); //previous version(1)Ahora, ve a la aplicación en Chrome:
Abra Developer Tools (Ctrl+Shift+I / Cmd+Option+I)
Vaya a la Applications Tab , haga clic en su base de datos de destino y haga clic en Delete database
Actualice la página e intente lo que sea que esté tratando de lograr.
¡Deberia de funcionar!