Je pensais avoir lu que vous pouvez interroger des sous-collections avec le nouveau Firebase Firestore, mais je ne vois aucun exemple. Par exemple, j'ai ma configuration Firestore de la manière suivante:
- Danses [collection]
- danceName
- Chansons [collection]
- titre de chanson
Comment pourrais-je interroger "Trouver toutes les danses où songName == 'X'"
firebase
google-cloud-firestore
Nelson.b.austin
la source
la source
Réponses:
Mise à jour 07/05/2019
Aujourd'hui, nous avons publié des requêtes de groupe de collection , et celles-ci vous permettent d'interroger entre les sous-collections.
Ainsi, par exemple dans le SDK Web:
Cela correspondrait aux documents de toute collection où la dernière partie du chemin de la collection est «Chansons».
Votre question initiale portait sur la recherche de danses où songName == 'X', et cela n'est toujours pas possible directement, cependant, pour chaque morceau correspondant, vous pouvez charger son parent.
Réponse originale
C'est une fonctionnalité qui n'existe pas encore. Cela s'appelle une "requête de groupe de collection" et vous permettrait d'interroger toutes les chansons, quelle que soit la danse qui les contient. C'est quelque chose que nous avons l'intention de soutenir, mais nous n'avons pas de calendrier concret sur le moment où cela arrivera.
La structure alternative à ce stade est de faire des chansons une collection de haut niveau et de faire danser quelle chanson la chanson fait partie d'une propriété de la chanson.
la source
METTRE À JOUR maintenant Firestore prend en charge array-contains
Avoir ces documents
fais-le de cette façon
@ Nelson.b.austin Puisque Firestore n'a pas encore cela, je vous suggère d'avoir une structure plate, ce qui signifie:
En l'ayant de cette manière, vous pouvez le faire:
J'espère que ça aide.
la source
songName_Title3: false
ça sert ? si je ne me trompe pas, cela ne peut être utilisé que pour rechercher des danses qui n'ont pas de nom de chanson spécifique en supposant que nous avons besoin d'unsongName_Title3: false
pourdances.where("songName_"+songTitle, "==", false);
renvoyer de tels résultats, il ne serait pas logique que chaque danse ait des drapeaux booléens pour chaque chanson possible name ...Et si vous stockiez des chansons comme un objet plutôt que comme une collection? Chaque danse comme, avec des chansons comme champ: tapez Object (pas une collection)
alors vous pouvez interroger toutes les danses avec aNameOfASong:
la source
MISE À JOUR 2019
Firestore a publié des requêtes de groupe de collection. Voir la réponse de Gil ci-dessus ou la documentation officielle des requêtes de groupe de collection
Réponse précédente
Comme l'a déclaré Gil Gilbert, il semble que des requêtes de groupe de collection soient actuellement en cours. En attendant, il est probablement préférable d'utiliser des collections de niveau racine et de simplement relier ces collections à l'aide des UID du document.
Pour ceux qui ne le savent pas déjà, Jeff Delaney a des guides et des ressources incroyables pour tous ceux qui travaillent avec Firebase (et Angular) sur AngularFirebase .
Modélisation de données relationnelles Firestore NoSQL - Ici, il décompose les bases de la structuration de bases de données NoSQL et Firestore
Modélisation avancée des données avec Firestore par exemple - Ce sont des techniques plus avancées à garder à l'esprit. Une excellente lecture pour ceux qui souhaitent faire passer leurs compétences Firestore au niveau supérieur
la source
NOUVELLE MISE À JOUR 8 juillet 2019:
la source
Vous pouvez toujours rechercher comme ceci: -
la source
la source
la source
Il pourrait être préférable d'utiliser une structure de données plate.
La documentation spécifie les avantages et les inconvénients des différentes structures de données sur cette page .
Plus précisément sur les limites des structures avec sous-collections:
Contrastant avec les prétendus avantages d'une structure de données plate:
la source
J'ai trouvé une solution. S'il te plaît, vérifie cela.
Et puis vous pouvez voir les onglets Données, Règles, Index, Utilisation dans votre firestore cloud à partir de console.firebase.google.com. Enfin, vous devez définir les index dans l'onglet index.
Remplissez ici l'ID de collection et une valeur de champ. Sélectionnez ensuite l'option de groupe de collecte. Profitez-en. Merci
la source
Je travaille avec Observables ici et le wrapper AngularFire, mais voici comment j'ai réussi à le faire.
C'est un peu fou, j'apprends toujours les observables et j'en ai peut-être trop fait. Mais c'était un bel exercice.
Quelques explications (pas un expert RxJS):
in
requête.J'ai copié-collé mon code et changé les noms de variables pour les vôtres, je ne sais pas s'il y a des erreurs, mais cela a bien fonctionné pour moi. Faites-moi savoir si vous trouvez des erreurs ou si vous pouvez suggérer une meilleure façon de le tester avec peut-être une fausse cheminée.
la source