0
votes

Mettre à jour un seul identifiant de document en sous-collection dans Firestore dans ReactJS

est-il possible de ne mettre à jour qu'un seul identifiant de document dans une sous-collection Firestore, je cherche une solution mais tout ce que je peux trouver, c'est d'interroger tous les documents. Si j'utilise QuerySnapshot.foreach () Tous les documents d'une sous-collection avec la même valeur de champ sont mises à jour. Utiliser .here () interrogeez également tous les documents et non un identifiant spécifique, mais je n'essaie que de mettre à jour une. J'essaie d'utiliser l'ID de document, mais je ne pouvais pas comprendre comment appeler l'identifiant de la sous-collection. Y a-t-il un moyen de faire cela? XXX

Voici un exemple de capture d'écran de la structure de sous-collection Firestore Entrez la description de l'image ici  Structure de sous-collection . Actuellement, j'ai essayé d'utiliser UUIDV4 afin que je puisse également créer une valeur de champ de postide lors de l'ajout d'un nouveau document, car j'avais l'intention de simplement appeler le postide comme un identifiant de document, mais il était également à l'intérieur du ducumement de la sous-collection. >


11 commentaires

Je ne suis pas clair où vous êtes coincé. Il est certainement possible de mettre à jour un document unique si vous savez que c'est ID. Ceci est couvert dans le Documentation . Vous devez transmettre l'ID vers DOC () .


ouais je n'ai pas pu comprendre la bonne façon d'appeler un identifiant de document pour la Sous-collection


Il n'y a qu'un seul moyen - passez l'ID à Doc () . Vous n'acceptez rien en ce moment.


Oui, j'ai déjà passé un identifiant où j'ai même utilisé un UUIDV4 mais ne fonctionne pas non plus. C'est donc un exemple de ce que j'utilise actuellement où je ne pouvais pas comprendre la bonne façon d'appeler l'ID pour le Doc () dans une sous-collection. Ce que je parle, c'est la sous-collection non la collection racine. J'essaie actuellement quelque chose pour le moment, je ne sais pas si cela fonctionnera.


Je ne suis toujours pas clair où tu es coincé. Soit vous connaissez l'identifiant du document existant ou vous ne le faites pas. Si vous ne le faites pas, vous devez interroger pour le trouver.


Je ne peux que le faire fonctionner si je demande à tous le document, mais chaque valeur de terrain est aussi mise à jour, mais ce que j'essaie de faire est de mettre à jour un document et non tous. Actuellement, je suis bloqué sur la façon d'appeler l'identifiant pour un seul document d'une sous-associée.


Pouvez-vous montrer une capture d'écran de votre base de données avec l'ensemble du chemin du document que vous souhaitez mettre à jour?


Voici un exemple [1] sur la manière d'insérer une sous-collection à l'aide de Node JS. Comme @Renaud Tarnec mentionné, il sera utile de voir la structure de vos documents. Enfin, si vous suivez un guide, ce sera utile si vous le partagez aussi. [1] Firebase.google.com/docs/firestore/Data-Model#subcollecti Ons


Désolé pour la réponse tardive, j'ai joint une image d'exemple de ma structure de sous-collection Firestore ci-dessus.


Merci pour la mise à jour. Pouvez-vous montrer / détailler le chemin du userpostposts Sous-collection?


J'ai ajouté un autre attachement ci-dessus pour le chemin de la sous-collection


3 Réponses :


0
votes

Vous n'avez pas besoin d'utiliser collectoin.set ({}) Vous pouvez également utiliser Collection.Update ({}) pour mettre à jour le champ de collecte spécifique. XXX

Ici, je mentionne le code. C'est lien du site de référence.


3 commentaires

Merci mais ma question concerne la sous-collection, je n'ai aucun problème avec la collection racine.


Vous pouvez utiliser comme ça. dB.Collection ("villes / subcollecion"). Doc ("DC"). Mise à jour ({capital: true}) Ajouter un chemin dans la collection.


Ouais, c'est ce que la question concerne réellement l'appel de l'ID DOC d'une sous-collection d'un seul document. Peut-être que ma question est vague, mais j'ai mis à jour mon poste ci-dessus pour mieux comprendre ma question.



0
votes

avec l'hypothèse que vous connaissez l'ID du document dans la collection code> Utilisateurs code> et l'ID du document dans la collection code> userpoststs code>, vous pouvez mettre à jour ce dernier document comme suit: xxx pré>


plus généralement, pour créer un documentreference code> à un document pour lequel vous connaissez le chemin, vous devez alternativement appeler la collection () code> et doc ( ) code> méthodes. p>

Vous pouvez également appeler le doc () code> méthode avec un chemin de slash séparé sur un document, comme shiwn ci-dessous. Notez que, puisque vous pointez sur un document, le chemin SLASH séparé contient un nombre pair d'éléments. P>

const currentUser = firebase.auth().currentUser;
const userPostId = "8ea3....";

const userPostRef = firebase.firestore().doc(`users/${currentUser}/userPosts/${userPostId}`)


8 commentaires

Vous avez fait cela, mais je suis coincé avec appel à la Sous Collection Doc ID pour un seul document, par exemple, par exemple, Doc (Doc.Id) ne fonctionnera pas avec cela, cela me donne une erreur. J'ai donc changé les identifiants vers UUID (PIC ci-dessus) et enregistrez un champ avec le nom postide pour stocker mon identifiant DOC. Querifier le postide me donne une liste de tous les identifiants DOC où je peux utiliser dans ma doc (postide) comme celle-ci fonctionne, mais que postide était querride toutes les valeurs de champ de document sont mises à jour en même temps qui me ramène au début. Même chose que d'utiliser QuerySnapshot.


Je suis désolé mais il est très difficile de comprendre votre objectif ... Déjà beaucoup de commentaires / réponses où écrit autour de votre question et ce n'est toujours pas clair ce que vous essayez de faire. J'ai le sentiment que peut-être que vous mélangez des champs et des documents mix-up. Je vous suggérerais de trouver une explication très détaillée de votre objectif avec certains diagrammes montrant ce que vous voulez faire, quelles sont vos données d'entrée et résultat souhaité.


Ce que j'essaie de faire est de mettre à jour un document unique dans une sous-collection, mais je suis coincé sur la manière de rédiger correctement l'identifiant à l'intérieur du fichier .doc () car je finis toujours par mettre à jour tous les identifiants de document avec le même nom de champ. Si j'ai 2 documents avec différents identifiants à l'intérieur d'une collection, les deux sont mises à jour avec les mêmes valeurs qui ne sont pas ce que j'essaie de faire. Mais de toute façon, merci pour toute l'aide que j'étudierai tout cela.


Ce qui n'est pas clair, c'est "mettre à jour tous les identifiants de document avec le même nom de champ". Si vous définissez une documentation, vous ne mettez à jour qu'un seul document pas plusieurs. Les chemins de documents sont uniques.


Comment puis-je la définir dans une sous-collection sans interroger tous les documents? Semblable à faire .doc (doc.id) est-ce possible?


Comme Doug a expliqué dans l'un de ses commentaires ci-dessus: «Soit vous connaissez l'ID du document existant, ou vous ne le faites pas. Si vous ne le faites pas, vous devez interroger pour le trouver».


J'ai déplacé ma sous-collection à une autre collection racine pour le moment. Tout fonctionne comme je le voulais maintenant. Je ne connais toujours pas la sous-collection, mais j'espère qu'il y aura plus de documentation et d'exemples à étudier à l'avenir.


J'ai maintenant compris comment appeler un identifiant DOC d'un seul document dans une sous-collection en utilisant le routeur réagissant V5 Usparams et cela fonctionne. J'ai posté la réponse pour référence.



2
votes

J'ai finalement compris comment appeler un identifiant de document pour un seul document dans une sous-collection et modifier uniquement le champ d'un document spécifique. Ce n'est peut-être pas la meilleure solution, mais je partage cela pour ceux qui ont un problème similaire à mien.

J'ai une liste interrogée de poste dans ma postlist.js et chacun a une clé unique équivalente à l'ID de document À l'intérieur de la sous-collection. xxx

puis sur mon itinéraire, j'ai utilisé l'ID d'Usparams à l'aide du routeur React. Utilisation de lien i aller à la page posteditor, posteditor.js. xxx

à l'aide de l'ID d'Usparams à l'intérieur du posteditor.js Je peux maintenant attribuer l'identifiant à l'intérieur du fichier .doc ( ) Dans ma fonction EditPost. xxx

Je peux éditer un document unique et gérer chaque document séparément à l'intérieur de la sous-collection. Comme je l'ai dit, ce n'est peut-être pas la meilleure solution, mais cela fonctionne pour moi sans erreur.


0 commentaires