Comment ajouter indexOn à un userId dans la base de données firebase
je reçois une erreur de
Utilisation d'un index non spécifié. Vos données seront téléchargées et filtrées sur le client. Envisagez d'ajouter ".indexOn": "WkJymEhTtvgtIzQZZxs3VUTbmLh2quan" dans /Products à vos règles de sécurité pour de meilleures performances.
c'est mon code:
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);
});
j'essaie d'interroger les produits qui ont user.uid+ 'quan'dans ma base de données firebase
et c'est la structure de mon JSON ---->>>
un grand merci si quelqu'un peut m'aider
Réponses
Comme décrit dans la documentation sur l'indexation des données et dans le message d'erreur, vous devrez ajouter un index aux règles Firebase pour votre base de données dans la console :
{
"rules": {
"Products": {
".indexOn": "WkJymEhTtvgtIzQZZxs3VUTbmLh2quan"
}
}
}
Cela résoudra le message d'erreur pour l'utilisateur actuel. Le problème est que vous devrez déclarer un tel index explicitement pour chaque UID, ce qui n'est pas possible à moins que vous n'ayez un ensemble spécifique d'utilisateurs en tête.
Le problème sous-jacent est que votre structure de données actuelle facilite la recherche d'un utilisateur pour un produit donné, mais ne facilite pas la recherche des produits pour un utilisateur spécifique. Pour permettre ce dernier cas d'utilisation, vous souhaiterez ajouter une structure de données supplémentaire pour ce mappage inversé, parfois appelé index inversé ou inversé :
"Users": {
"uid1": {
"productId1": true,
"productId2": true
},
"uid2": {
"productId3": true,
"productId4": true
}
}
Bien que cela duplique certaines données, cela vous permet de rechercher les données associées dans les deux sens. Ce type de duplication de données pour permettre des cas d'utilisation est assez courant dans les bases de données NoSQL.
Regarde aussi:
- Relation plusieurs à plusieurs dans Firebase
- Requête Firebase double imbriquée
- Requête Firebase si l'enfant de l'enfant contient une valeur