Heim > Web-Frontend > js-Tutorial > Wie kann ich Firebase effizient nach Chats mit einem bestimmten Teilnehmer abfragen?

Wie kann ich Firebase effizient nach Chats mit einem bestimmten Teilnehmer abfragen?

Susan Sarandon
Freigeben: 2024-12-24 08:10:15
Original
947 Leute haben es durchsucht

How to Efficiently Query Firebase for Chats Containing a Specific Participant?

So fragen Sie eine Firebase-Tabelle nach Werten ab, die in einem untergeordneten Element eines untergeordneten Elements enthalten sind.

Einführung

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.

Problemübersicht

Beachten Sie die folgende Tabellenstruktur:

chats
--> randomId
-->--> participants
-->-->--> 0: 'name1'
-->-->--> 1: 'name2'
-->--> chatItems
Nach dem Login kopieren

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
        }
    });
 }
Nach dem Login kopieren

Steht aufgrund der Einschränkungen bei der Indizierung fester Pfade in Firebase vor Herausforderungen.

Lösung: Set vs. Array- und Indexinversion

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
}
Nach dem Login kopieren

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
  }
}
Nach dem Login kopieren

Jetzt kann die folgende Abfrage die Chatrooms eines Benutzers abrufen:

ref.child("userChatrooms").child("john")
Nach dem Login kopieren

Cloud Firestore Alternative

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);
Nach dem Login kopieren

Dies bietet eine präzisere und effizientere Lösung als in Firestore.

Fazit

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage