Angesichts der folgenden Struktur, wie gehe ich zum Abrufen bestimmter Benutzerbenachrichtigungen?Firebase-Datenbank: Abfrage denormalized Datenkämpfe
dh: uid0001
der Lage sein, shoud eine Liste abzurufen: [xxxxx01, xxxxx02]
:
notifications
uid01
xxxxx01
uid02
xxxxx02
uid03
xxxxx03
uid04
xxxxx04
users
uid0001
notifications
uid01
uid02
Leider ist diese Ungeheuerlichkeit extrem ineffizient:
firebase.database().ref(`users/${user.userId}/notifications`).once('value').then((snapshot) => {
snapshot.forEach((data) => {
firebase.database().ref(`notifications/${data.key}`).once('value').then((snap) => {
this.list.unshift(localUpdates)
})
})
})
Möglicherweise etwas entlang der Linien von (Warnung, Pseudo-Code kommt):
firebase.database().ref('notifications').on('child_added').equalTo('whatever the childs key is here').then((snapshot) => {
})
Wie immer Jede Richtung, Prost und verfaulte Früchte sind willkommen, also danke!
Dieses etwas, das ich gewesen hinzufügen haben Nachsinnen. Der 'for_user' müsste ein Array sein. Könnte das 'queryOrdered' noch funktionieren wie ein any? Zum Beispiel: '' 'queryOdered (byChild:" for_user "). Enthält (" uid01 ")' '' – studiobrain
@studiobrain Nein. Bitte verwenden oder speichern Sie keine Arrays in Firebase! Siehe [Array's Are Evil] (https://firebase.googleblog.com/2014/04/best-practices-arrays-in-firebase.html). Mit der Struktur, die ich vorschlage, gibt es keinen Grund, Arrays trotzdem zu verwenden. In Firebase gibt es keine "Enthält". Aus diesem Grund habe ich Optionen in meine Lösung aufgenommen, sodass Sie Daten auf verschiedene Arten abfragen können. – Jay
Einverstanden, das war nicht als Literal zu Array so viel wie nur eine Liste gemeint. Das oben genannte funktioniert gut, ich gehe nur eine Ebene tiefer, um die zugehörige Benachrichtigung basierend auf Benutzer zu erhalten ... Danke! – studiobrain