2017-10-15 6 views
3

Existe-t-il un moyen d'obtenir l'ID généré automatiquement pour un document créé dans le cadre d'un lot utilisant Firestore?Puis-je obtenir l'ID généré pour un document créé avec batch(). Set à l'aide de Firestore?

Lorsque vous utilisez .add() je peux facilement obtenir un ID:

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 du document qui a été ajouté à votes?

Mise à jour:

Doug Stevenson est correct - je peux accéder à l'ID à votesRef.id

Répondre

5

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

+1

Je suis l'exemple de la documentation Web Firestore: 'var newCityRef = this.afs.collection (" villes "). Doc();' me donne une erreur "attendus 1 arguments, mais a obtenu 0". Cela m'empêche complètement d'aller de l'avant. – FiringBlanks

+0

@FiringBlanks Peut-être angulaire fait quelque chose de différent de l'API JavaScript standard? –

+0

@DougStevenson On dirait qu'ils en ont fait un paramètre obligatoire. Voir ici pour plus d'informations: https://github.com/firebase/firebase-js-sdk/blob/d43d461aaa2496d4cd12fd593373f6dad214716f/packages/firestore/src/api/database.ts#L397-L408 – Edric