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.
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.
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")
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.
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!