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

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

Susan Sarandon
Susan Sarandonoriginal
2024-12-24 08:10:151042parcourir

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

Comment interroger une table Firebase pour les valeurs contenues dans l'enfant d'un enfant

Introduction

Les bases de données Firebase offrent un large éventail de fonctionnalités pour les données gestion. Un défi courant consiste à interroger des données en fonction de valeurs au sein d’une structure enfant imbriquée. Ce guide montre comment gérer efficacement de telles requêtes dans Firebase.

Aperçu du problème

Considérez la structure de table suivante :

chats
--> randomId
-->--> participants
-->-->--> 0: 'name1'
-->-->--> 1: 'name2'
-->--> chatItems

L'objectif est d'interroger les « chats » tableau pour récupérer toutes les discussions qui incluent un participant spécifique. La tentative de requête actuelle :

subscribeChats(username: string) {
    return this.af.database.list('chats', {
        query: {
            orderByChild: 'participants',
            equalTo: username, // How to check if participants contain username
        }
    });
 }

Rencontre des défis en raison des limitations de l'indexation des chemins fixes dans Firebase.

Solution : Ensemble contre tableau et inversion d'index

1. Ensemble ou tableau :

La structure de données utilisait initialement les participants stockés sous forme de tableau, ce qui autorise les doublons et ne reflète pas le modèle de participant unique souhaité. Les ensembles Firebase offrent une solution plus appropriée, garantissant que chaque enfant n'existe qu'une seule fois.

participants: {
  "puf": true
}

2. Inversion d'index :

Au lieu d'imbriquer les participants dans les discussions, la structure doit être inversée pour créer un « index inversé » qui répertorie les discussions en fonction de leurs participants. Cela permet des requêtes efficaces pour les salles de discussion d'un utilisateur :

userChatrooms: {
  john: {
    chatRoom1: true,
    chatRoom2: true
  },
  puf: {
    chatRoom1: true,
    chatRoom3: true
  }
}

Désormais, la requête suivante peut récupérer les salles de discussion d'un utilisateur :

ref.child("userChatrooms").child("john")

Alternative Cloud Firestore

Cloud Firestore offre une prise en charge améliorée pour ce type de requête avec son opérateur array-contains, qui permet de filtrer les documents en fonction des valeurs contenues dans arrays :

query = collection.where('participants', 'array-contains', username);

Cela fournit une solution plus concise et efficace que dans Firestore.

Conclusion

Dans Firebase, l'interrogation de structures de données imbriquées nécessite une planification et une compréhension minutieuses des données limites de la structure. En utilisant des ensembles et des index inversés, et en tirant parti de l'opérateur array-contains de Cloud Firestore, les développeurs peuvent gérer efficacement de telles requêtes dans leurs applications Firebase.

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