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
Susan Sarandonoriginal
2024-12-19 16:17:13112parcourir

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
  }
}

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!

Déclaration:
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