Firebase-Datenbanken bieten eine breite Palette von Funktionen für Daten Management. Eine häufige Herausforderung besteht darin, Daten basierend auf Werten innerhalb einer verschachtelten untergeordneten Struktur abzufragen. Dieser Leitfaden zeigt, wie man solche Abfragen in Firebase effizient handhabt.
Beachten Sie die folgende Tabellenstruktur:
chats --> randomId -->--> participants -->-->--> 0: 'name1' -->-->--> 1: 'name2' -->--> chatItems
Das Ziel besteht darin, die „Chats“ abzufragen. Tabelle, um alle Chats abzurufen, an denen ein bestimmter Teilnehmer beteiligt ist. Der aktuelle Abfrageversuch:
subscribeChats(username: string) { return this.af.database.list('chats', { query: { orderByChild: 'participants', equalTo: username, // How to check if participants contain username } }); }
Steht aufgrund der Einschränkungen bei der Indizierung fester Pfade in Firebase vor Herausforderungen.
1. Set vs. Array:
Die verwendete Datenstruktur speicherte die Teilnehmer zunächst als Array, was Duplikate zulässt und nicht das gewünschte einzigartige Teilnehmermodell widerspiegelt. Firebase-Sets bieten eine geeignetere Lösung und stellen sicher, dass jedes Kind nur einmal existiert.
participants: { "puf": true }
2. Indexumkehr:
Anstatt Teilnehmer innerhalb von Chats zu verschachteln, sollte die Struktur umgekehrt werden, um einen „invertierten Index“ zu erstellen, der Chats basierend auf ihren Teilnehmern auflistet. Dies ermöglicht effiziente Abfragen für die Chatrooms eines Benutzers:
userChatrooms: { john: { chatRoom1: true, chatRoom2: true }, puf: { chatRoom1: true, chatRoom3: true } }
Jetzt kann die folgende Abfrage die Chatrooms eines Benutzers abrufen:
ref.child("userChatrooms").child("john")
Cloud Firestore bietet mit seinem Array-Contains-Operator erweiterte Unterstützung für diese Art von Abfrage, der das Filtern von Dokumenten basierend auf den darin enthaltenen Werten ermöglicht Arrays:
query = collection.where('participants', 'array-contains', username);
Dies bietet eine präzisere und effizientere Lösung als in Firestore.
In Firebase erfordert das Abfragen verschachtelter Datenstrukturen eine sorgfältige Planung und ein sorgfältiges Verständnis der Daten Strukturbeschränkungen. Durch die Verwendung von Mengen und invertierten Indizes und die Nutzung des Array-Contains-Operators von Cloud Firestore können Entwickler solche Abfragen in ihren Firebase-Anwendungen effizient verarbeiten.
Das obige ist der detaillierte Inhalt vonWie kann ich Firebase effizient nach Chats mit einem bestimmten Teilnehmer abfragen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!