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
Libérer: 2024-12-24 08:10:15
original
951 Les gens l'ont consulté

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

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

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

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

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

ref.child("userChatrooms").child("john")
Copier après la connexion

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

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!

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