Requête Firebase pour rechercher des discussions contenant un participant
Contexte :
La structure des données sous La considération représente un système de discussion dans lequel les discussions ont des participants et des éléments de discussion. L'objectif est d'interroger la table « chats » pour récupérer tous les chats qui ont un participant spécifique en fonction d'une chaîne de nom d'utilisateur donnée.
Tentative initiale :
Le code fourni tente d'utiliser les méthodes orderByChild et equalTo pour interroger la table "chats" par l'enfant "participants", en spécifiant le nom d'utilisateur pour trouver des correspondances. Cependant, cette approche est limitée car :
Approche d'index inversé :
Pour remédier à ces limitations, il est recommandé d'inverser la structure des données en créant un nœud « userChatrooms » qui mappe les utilisateurs aux salons de discussion auxquels ils participent. Cela permet un filtrage efficace par utilisateur :
userChatrooms: { john: { chatRoom1: true, chatRoom2: true }, puf: { chatRoom1: true, chatRoom3: true } }
Requête à l'aide de la méthode inversée Index :
Avec la structure d'index inversée, trouver toutes les discussions d'un utilisateur devient simple :
ref.child("userChatrooms").child("john")
Alternative Cloud Firestore :
Cloud Firestore offre une meilleure prise en charge de ce type de requête avec son opérateur array-contains. Cela permet de filtrer directement les documents qui contiennent une valeur spécifique dans un tableau :
Query query = firestore.collection("chats") .whereArrayContains("participants", username);
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!