J'explore juste le nouveau Firebase Firestore et il contient un type de données appelé reference
. Ce n'est pas clair pour moi ce que cela fait.
- Est-ce comme une clé étrangère?
- Peut-il être utilisé pour pointer vers une collection qui se trouve ailleurs?
- S'il
reference
s'agit d'une référence réelle, puis-je l'utiliser pour les requêtes? Par exemple, puis-je avoir une référence qui pointe directement vers l'utilisateur, au lieu de stocker le userId dans un champ de texte? Et puis-je utiliser cette référence utilisateur pour interroger?
firebase
google-cloud-firestore
Jürgen Brandstetter
la source
la source
Réponses:
Les références ressemblent beaucoup aux clés étrangères.
Les SDK actuellement publiés ne peuvent pas stocker de références à d'autres projets. Dans un projet, les références peuvent pointer vers n'importe quel autre document de n'importe quelle autre collection.
Vous pouvez utiliser des références dans les requêtes comme toute autre valeur: pour le filtrage, le classement et la pagination (startAt / startAfter).
Contrairement aux clés étrangères dans une base de données SQL, les références ne sont pas utiles pour effectuer des jointures dans une seule requête. Vous pouvez les utiliser pour des recherches dépendantes (qui ressemblent à des jointures), mais soyez prudent car chaque saut entraînera un autre aller-retour vers le serveur.
la source
friends
collection répertoriant tous mes amis (friends/myId
). Ensuite, je référence ce document dans lefriends
champ d'un autre document (group/groupId
). Je voudrais afficher que mes amis qui sont dans ce groupe, faire quelque chose comme ceci:where('friends.myId', '==', true)
.Ajout ci-dessous ce qui a fonctionné pour moi en utilisant des références dans Firestore.
Comme le disent les autres réponses, c'est comme une clé étrangère. L'attribut reference ne renvoie cependant pas les données du document de référence. Par exemple, j'ai une liste de produits, avec une référence userRef comme l'un des attributs du produit. Obtenir la liste des produits me donne la référence de l'utilisateur qui a créé ce produit. Mais cela ne me donne pas les détails de l'utilisateur dans cette référence. J'ai utilisé un autre back-end en tant que services avec des pointeurs avant qui ont un indicateur "populate: true" qui donne les détails de l'utilisateur au lieu de simplement l'identifiant de référence de l'utilisateur, ce qui serait génial d'avoir ici (avec un peu de chance une amélioration future ).
Vous trouverez ci-dessous un exemple de code que j'ai utilisé pour définir la référence ainsi que pour obtenir la liste de la collection de produits, puis obtenir les détails de l'utilisateur à partir de l'ID de référence utilisateur donné.
Définissez une référence sur une collection:
Obtenez une collection (produits) et toutes les références sur chaque document (détails utilisateur):
J'espère que cela t'aides
la source
db.collection('products').get()
. Avez-vous essayé d'obtenir l'utilisateur directement? Je suppose que celanewItem.userRef.get()
devrait fonctionner à la place dedb.collection("users").doc(newItem.userRef.id).get()
uid
référence et via celle-ci.reference
si nous ne pouvons pas l'utiliser comme une véritable clé étrangère devrait fonctionner?reference
sur astring
est que vous pouvez appelerget()
directement la référence. Pas encore très utile. J'espère qu'ils ajoutent une option pour remplir automatiquement les références avec les objets correspondants!Pour ceux qui recherchent une solution Javascript pour interroger par référence - le concept est que, vous devez utiliser un objet `` référence de document '' dans l'instruction de requête
(Félicitations à la réponse ici: https://stackoverflow.com/a/53141199/1487867 )
la source