2 votes

Utilisation d'une séquence de chiffres pour définir la valeur d'un champ de document Firestore

Je veux stocker les informations de l'utilisateur dans le document avec son identifiant (et non l'identifiant du document). Je veux générer l'identifiant sous une forme particulière comme XYZ0001, où les 4 derniers chiffres augmenteront automatiquement chaque fois qu'un nouvel utilisateur s'ajoutera. Par exemple, XYZ0001, XYZ0002, etc. J'ai essayé ceci...

return firestore
          .collection("xyzData")
          .doc(resp.user.uid)
          .set({
            firstName: newUser.firstName,
            lastName: newUser.lastName,
            email: newUser.email,
            ca_id: "XYZ" + pad(firestore.collection("xyzData").count())
          })
          .then

où pad() est une fonction qui me donne les 4 derniers chiffres

function pad(n) {
  var s = "000" + n;
  return s.substr(s.length - 4);
}

mais je reçois un message d'erreur indiquant que count() n'est pas une fonction.

J'ai également pensé à un autre moyen de lire la valeur du dernier identifiant et de l'augmenter d'une unité pour l'utilisateur suivant, mais je ne pourrai pas l'implémenter.

5voto

Renaud Tarnec Points 8353

Notez qu'il n'y a pas de count() pour un CollectionReference . Si vous souhaitez connaître le nombre de documents dans une collection, vous devez appeler la fonction asynchrone get() pour obtenir un QuerySnapshot et utiliser ensuite le size propriété. Cependant, vous ne pouvez pas passer un appel à get() en tant que propriété d'un objet.


La solution est d'entretenir son propre comptoir.

Il existe deux méthodes standard pour cela :

Utilice firebase.firestore.FieldValue.increment()

Comme expliqué dans le document vous pouvez appeler firebase.firestore.FieldValue.increment() pour incrémenter un champ spécifique d'un document Firestore. Par exemple, vous pouvez avoir un document dans une base de données counter Collection que vous incrémentez et lisez chaque fois que vous souhaitez obtenir une nouvelle valeur de la séquence. En fonction de votre cas d'utilisation, vous pouvez avoir besoin d'utiliser une collection Transaction .

Notez également que "vous ne pouvez mettre à jour un document qu'une seule fois par seconde".

Compteur distribué

Si vous devez mettre à jour votre document de guichet plus d'une fois par seconde vous devez utiliser un compteur distribué, comme expliqué dans la section doc .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X