Cómo agregar indexOn a userId en la base de datos de firebase
estoy recibiendo un error de
Usando un índice no especificado. Sus datos serán descargados y filtrados en el cliente. Considere agregar ".indexOn": "WkJymEhTtvgtIzQZZxs3VUTbmLh2quan" en /Products a sus reglas de seguridad para un mejor rendimiento.
este es mi código:
firebase.database().ref("Products").orderByChild(user.uid + "quan").startAt(0).on('value', function (s) {
var cartNum = 0;
s.forEach(function (d) {
console.log(d.child(user.uid + "quan").val());
cartNum += d.child(user.uid + "quan").val();
});
$("#cartCount").text(cartNum);
});
estoy tratando de consultar los productos que tiene user.uid+ 'quan'en mi base de datos de firebase
y esta es la estructura de mi JSON ---->>>
muchas gracias si alguien me puede ayudar
Respuestas
Como se describe en la documentación sobre la indexación de datos y en el mensaje de error, deberá agregar un índice a las reglas de Firebase para su base de datos en la consola:
{
"rules": {
"Products": {
".indexOn": "WkJymEhTtvgtIzQZZxs3VUTbmLh2quan"
}
}
}
Esto resolverá el mensaje de error para el usuario actual. El problema es que deberá declarar dicho índice explícitamente para cada UID, lo cual no es factible a menos que tenga en mente un conjunto específico de usuarios.
El problema subyacente es que su estructura de datos actual facilita la búsqueda de un usuario para un producto determinado, pero no facilita la búsqueda de productos para un usuario específico. Para permitir el último caso de uso, querrá agregar una estructura de datos adicional para ese mapeo invertido, a veces denominado índice inverso o invertido:
"Users": {
"uid1": {
"productId1": true,
"productId2": true
},
"uid2": {
"productId3": true,
"productId4": true
}
}
Si bien esto duplica algunos datos, le permite buscar los datos relacionados en ambas direcciones. Este tipo de duplicación de datos para permitir casos de uso es bastante común en las bases de datos NoSQL.
Ver también:
- Relación de muchos a muchos en Firebase
- Consulta de Firebase doblemente anidada
- Consulta de Firebase si el hijo del hijo contiene un valor