Comment ajouter des sous-groupes à un document dans Firebase Cloud Firestore
La documentation ne sont pas des exemples sur la façon d'ajouter un sous-groupe à un document. Je sais comment ajouter un document à une collection et comment ajouter des données à un document, mais comment puis-je ajouter une collection (sous-groupe) à un document?
Ne devrait-il pas être une méthode comme ceci:
dbRef.document("example").addCollection("subCollection")
Vous devez vous connecter pour publier un commentaire.
En supposant que nous avons une application de chat qui a une structure de base de données qui ressemble à ceci:
À écrire un
subCollection
dans un document, veuillez utiliser le code suivant:Si vous souhaitez créer
messages
collecte et l'appel addDocument() 1000 fois sera cher pour sûr, mais c'est la façon dont Firestore œuvres. Vous pouvez passer à Firebase en temps réel de la Base de données si vous le voulez, où le nombre d'écritures n'a pas d'importance. Mais en ce qui concerne Les Types De Données Pris En Charge dans Firestore, en fait, vous pouvez utiliser un tableau parce que c'est suppoerted. Dans Firebase en temps réel de la base de données vous pouvez également utiliser unarray
, mais c'est ce qui est un anti-pattern. L'une des nombreuses raisons Firebase recommande à l'encontre de l'utilisation des tableaux est qu'il rend les règles de sécurité impossible à écrire.Cloud Firestore pouvez stocker des tableaux, il ne prend pas en charge les requêtes des membres du tableau ou de la mise à jour simple des éléments d'un tableau. Cependant, vous pouvez toujours le modèle de ce type de données en exploitant les autres capacités de Cloud Firestore. Ici est la documentation où elle est très bien expliqué.
Vous ne peut également créer un sous-groupe avec plus de 1000 messages et les ajouter à la base de données et dans le même temps de réfléchir à un seul enregistrement. Il sera considéré comme une opération d'écriture pour chaque message. Au total, 1000 opérations. L'image ci-dessus ne montre pas comment faire pour récupérer des données, il montre une structure de base de données dans laquelle vous avez quelque chose comme ceci:
messages
collections, puis en ajoutant cette collection à laroomA
dans une requête? Je suis assez sûr que la création de lamessages
de la collecte et de l'appel deaddDocument()
1000 fois sera cher (dans tous les sens). Ce que je cherche, c'est un moyen de créer ces documents et de les assigner à le sous-groupe localement, puis en ajoutant le sous-groupe pour le document. Je suis actuellement en train de mettre un tableau de dictionnaires (ou hashmaps) et le réglage de la matrice comme un type de données pour le document...Voici mon code:
Ce qui fait une collection de
EnglishWords
, qui dispose d'un documentof
. Le documentof
a trois sous-groupes:AudioSources
(enregistrements de la parole et des Américains accents Britanniques),FunFacts
, etTranslations
. Le sous-groupeTranslations
a un document:Spanish
. LeSpanish
document a trois paires clé-valeur, en vous disant que " de "est la traduction en espagnol de "de".La première ligne de code crée la collection
EnglishWords
. Nous attendons la promesse de résoudre avec.then
, et ensuite, nous créons les trois sous-groupes.Promise.all
nous dit quand tous les trois sous-groupes sont définis.À mon humble avis, j'ai utiliser des tableaux dans Firestore lorsque l'ensemble de la matrice est de télécharger ensemble, c'est à dire, je n'ai pas besoin d'accéder à des éléments individuels. Par exemple, un tableau des lettres du mot " de " serait
['o', 'f']
. L'utilisateur peut demander, "Comment puis-je m'en sort 'de'?" L'utilisateur ne va pas demander, "Quelle est la deuxième lettre de "de"?"- Je utiliser les collections, quand j'ai besoin d'accéder à des éléments individuels, une.k.un. documents. Avec l'ancienne Firebase en temps réel de la Base de données, j'ai dû télécharger les tableaux et puis itérer sur les tableaux avec
forEach
pour obtenir l'élément que je voulais. Cela faisait beaucoup de code, et avec une profonde structure de données et/ou de grands tableaux, j'ai été télécharger des tonnes de données que je n'ai pas besoin, et le ralentissement de mon application qui s'exécuteforEach
boucles sur de grands tableaux. Firestore met les itérateurs dans la base de données, sur leur fin, de sorte que je peux demander à un seul élément et qu'il m'envoie juste cet élément, me sauver de la bande passante et de faire mon application de fonctionner plus rapidement. Ce n'est pas pour déplaire pour une application web, si votre ordinateur dispose d'une connexion à large bande, mais pour les applications mobiles avec de mauvaises connexions de données et les périphériques lents c'est important.Voici deux photos de mon Firestore:
Voici une variante où le sous-groupe est de stocker des valeurs d'ID au niveau de la collection, plutôt à l'intérieur d'un document dans le cas où le sous-groupe est un champ avec des données supplémentaires.
C'est utile pour connecter un 1 à Plusieurs ID de mappage sans avoir à percer un document supplémentaire:
Grâce à @Alex réponse
trop tard pour une réponse, mais voici ce qui a fonctionné pour moi,
ajouter de la réussite d'un écouteur pour l'ajout de document et à l'utilisation firebase ID généré pour un chemin d'accès.
Utiliser cet IDENTIFIANT pour le chemin d'accès complet pour une nouvelle collection que vous souhaitez ajouter.
I. E. - dbReference.collection('yourCollectionName').document(firebaseGeneratedID).collection('yourCollectionName').add(yourDocumentPOJO/Object)