Come aggiungere indexOn a userId nel database Firebase

Aug 22 2020

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

1 FrankvanPuffelen Aug 22 2020 at 09:50

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