Firestore obtenir tous les docs et des sous-groupes de la racine de la collection de
Dire que j'ai ce genre de structure
A (collection): {
a (doc): {
name:'Tim',
B (collection):{
b (doc): {
color:'blue'
}
}
}
}
où A
et B
sont collections tout a
et b
sont documents.
Est-il un moyen pour obtenir tout ce qui est contenu dans un document racine avec une seule requête?
Si j'ai une requête comme ceci
db.collection("A").doc("a").get()
J'arrive juste name:'Tim'
champ. Ce que je veux, c'est aussi obtenir tous les B de documents.
En gros, je souhaite que ma requête renvoie
{
user:'Tim',
B (collection):{
b (doc): {
color:'blue'
}
}
}
Est-ce possible ou dois-je vraiment besoin de faire de multiples questions, un pour chaque collection :/?
Dire que j'ai vraiment profondes de nid de l'arbre de collections représentatives de l'utilisateur de profil, mes coûts vont augmenter comme l'enfer, puisqu'à chaque fois que je charge un profil d'utilisateur j'ai un multiplicateur de demandes de lecture 1 x N
où N est la profondeur de mon arbre :/.
- Ce type est
B
? Il y a un type de référence que vous pourriez essayer. - Type de référence se retrouve avec le même problème, les données ne sont pas récupérées.
- Désormais possible: firebase.googleblog.com/2019/06/...
Vous devez vous connecter pour publier un commentaire.
Comme nous le savons, l'interrogation dans le Cloud Firestore est peu profonde par défaut. Ce type de requête n'est pas prise en charge, mais c'est quelque chose que Google peut envisager dans le futur.
Si vous êtes préoccupé par les coûts de chaque pull, vous aurez besoin de la structure de vos données en fonction de votre point de vue commun /pull besoins, plutôt que ce que vous pourriez préférer pour une parfaite structure. Si vous avez besoin de tirer ces choses ensemble, à chaque fois, Envisager l'utilisation de "cartes" pour des choses qui ne sont pas réellement besoin d'être sous-collections de documents.
Dans cet exemple, "préférences" est une carte.
Chaque document est également limitée en taille de 1 MO - donc si vous avez besoin de stocker quelque chose pour cet utilisateur qui permettra de l'échelle et de continuer à croître, comme les enregistrements de journal, alors il serait judicieux de casser les journaux dans une sous-collection, qui sera tiré quand vous le voulez, de sorte que chaque entrée de journal d'un document séparé... Et si tous les journaux pour tous les utilisateurs sont stockées dans un autre parent de la collection, ou une sous-collection de chaque utilisateur dépend vraiment de la façon dont vous serez en tirant les journaux et ce qui va entraîner des vitesses rapides, équilibrées par rapport aux coûts de tire. Si vous êtes montrant cet utilisateur de leurs 10 dernières recherches, alors une recherche-journal le faire de bon sens comme une sous-collection. Si vous êtes en tirant toutes les données de recherche pour tous les utilisateurs pour l'analyse, des parents au niveau de la collecte serait plus logique, parce que vous pouvez tirer tous les journaux en 1 pull, pour éviter la nécessité de tirer les logs de chaque utilisateur séparément.
Vous pouvez également imbriquer votre tire et les promesses ensemble à des fins de commodité.
L'ajout de Mat R réponse, si vous êtes à l'aide de babel ou vous pouvez utiliser async/await, vous pouvez obtenir le même résultat avec moins de code(pas de
catch
/then
):