Maison > interface Web > js tutoriel > Comment interroger efficacement Firebase ou Firestore pour les discussions contenant un participant spécifique ?

Comment interroger efficacement Firebase ou Firestore pour les discussions contenant un participant spécifique ?

Susan Sarandon
Libérer: 2024-12-19 16:17:13
original
109 Les gens l'ont consulté

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

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 :

  • Les participants sont stockés sous forme de tableau :Cette structure de données ne reflète pas avec précision le fait que les participants à une discussion doivent être uniques.
  • Limitations de l'indexation : Firebase nécessite des index prédéfinis pour interroger les chemins imbriqués, ce qui peut devenir fastidieux lorsqu'il s'agit de fichiers dynamiques. data.

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
  }
}
Copier après la connexion

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")
Copier après la connexion

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);
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal