Come aggiungere indexOn a userId nel database Firebase
sto ricevendo un errore di
Utilizzo di un indice non specificato. I tuoi dati verranno scaricati e filtrati sul client. Prendi in considerazione l'aggiunta di ".indexOn": "WkJymEhTtvgtIzQZZxs3VUTbmLh2quan" in /Products alle tue regole di sicurezza per prestazioni migliori.
questo è il mio codice:
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);
});
sto cercando di interrogare i prodotti user.uid+ 'quan'presenti nel mio database Firebase
e questa è la struttura del mio JSON ---->>>
molte grazie se qualcuno può aiutarmi
Risposte
Come descritto nella documentazione sull'indicizzazione dei dati e nel messaggio di errore, dovrai aggiungere un indice alle regole Firebase per il tuo database nella console:
{
"rules": {
"Products": {
".indexOn": "WkJymEhTtvgtIzQZZxs3VUTbmLh2quan"
}
}
}
Questo risolverà il messaggio di errore per l'utente corrente. Il problema è che dovrai dichiarare esplicitamente un tale indice per ogni UID, il che non è fattibile a meno che tu non abbia in mente un gruppo specifico di utenti.
Il problema di fondo è che la tua attuale struttura dati rende facile trovare un utente per un dato prodotto, ma non rende facile trovare i prodotti per un utente specifico. Per consentire quest'ultimo caso d'uso, ti consigliamo di aggiungere una struttura di dati aggiuntiva per quella mappatura invertita, a volte indicata come indice inverso o invertito:
"Users": {
"uid1": {
"productId1": true,
"productId2": true
},
"uid2": {
"productId3": true,
"productId4": true
}
}
Mentre questo duplica alcuni dati, ti consente di cercare i dati correlati in entrambe le direzioni. Questo tipo di duplicazione dei dati per consentire casi d'uso è abbastanza comune nei database NoSQL.
Vedi anche:
- Relazione Molti a molti in Firebase
- Query Firebase doppia nidificazione
- Query Firebase se child of child contiene un valore