Firebase-Abfrage zum Finden von Chats mit einem Teilnehmer
Hintergrund:
Die Datenstruktur unten Consideration stellt ein Chat-System dar, bei dem Chats Teilnehmer und Chat-Elemente haben. Das Ziel besteht darin, die Tabelle „Chats“ abzufragen, um alle Chats abzurufen, die einen bestimmten Teilnehmer haben, basierend auf einer bestimmten Benutzernamenzeichenfolge.
Erster Versuch:
Der bereitgestellte Code versucht, mit den Methoden „orderByChild“ und „equalTo“ die Tabelle „chats“ nach dem Kind „participants“ abzufragen und dabei den Benutzernamen anzugeben, um Übereinstimmungen zu finden. Dieser Ansatz ist jedoch begrenzt, weil:
Ansatz mit umgekehrtem Index:
Um diese Einschränkungen zu beheben, wird empfohlen, die Datenstruktur umzukehren, indem ein „userChatrooms“-Knoten erstellt wird, der Benutzer zuordnet zu den Chatrooms, an denen sie teilnehmen. Dies ermöglicht eine effiziente Filterung nach Benutzer:
userChatrooms: { john: { chatRoom1: true, chatRoom2: true }, puf: { chatRoom1: true, chatRoom3: true } }
Abfrage mit Invertiert Index:
Mit der umgekehrten Indexstruktur wird das Auffinden aller Chats für einen Benutzer einfacher:
ref.child("userChatrooms").child("john")
Alternative zu Cloud Firestore:
Cloud Firestore bietet mit seinem Array-Contains-Operator eine bessere Unterstützung für diese Art von Abfrage. Dies ermöglicht das direkte Filtern von Dokumenten, die einen bestimmten Wert in einem Array enthalten:
Query query = firestore.collection("chats") .whereArrayContains("participants", username);
Das obige ist der detaillierte Inhalt vonWie kann ich Firebase oder Firestore effizient nach Chats mit einem bestimmten Teilnehmer abfragen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!