web-dev-qa-db-fra.com

Puis-je obtenir l'ID généré pour un document créé avec batch (). Set en utilisant Firestore?

Existe-t-il un moyen d'obtenir l'ID généré automatiquement pour un document créé dans le cadre d'un lot à l'aide de Firestore?

Lorsque j'utilise .add(), je peux facilement obtenir un identifiant:

db.collection('posts')
  .add({title: 'Hello World'})
  .then(function(docRef) {
    console.log('The auto-generated ID is', docRef.id)
    postKey = docRef.id
});

En utilisant .batch(), je peux ajouter un document avec .doc() et .set():

const batch = db.batch();

const postsRef = db.collection('posts').doc(postKey);
batch.set(postsRef, {title: 'Hello Again, World'});

const votesRef = db.collection('posts').doc(postKey)
                   .collection('votes').doc();
batch.set(votesRef, {upvote: true})

batch.commit().then(function() {
});

Puis-je obtenir l'ID généré automatiquement par le document ajouté à votes?

Mettre à jour:

Doug Stevenson a raison - je peux accéder à l'ID au votesRef.id

7
uturnr

Lorsque vous appelez doc () sans aucun argument, il renverra immédiatement un DocumentReference qui possède un identifiant unique, sans rien écrire dans la base de données - l'identifiant est généré sur le client. Donc, si vous voulez cet identifiant, utilisez simplement la propriété id sur ce DocumentReference. Cet identifiant deviendra visible dans la base de données après la rédaction de ce document.

14
Doug Stevenson

J'ai eu le même problème, et je pense qu'il y a eu des changements à l'IPI de Firestore.

Je recevais une erreur pour le code comme:

const postsRef = db.collection('posts').doc(postKey);
batch.set(postsRef, {title: 'Hello Again, World'});

Le changement que j'ai trouvé nécessaire était de prendre la ref de l'objet doc:

const postsRef = db.collection('posts').doc(postKey).ref;

J'espère que cela vous aide tous!

2
Pini Cheyni