Existe-t-il un moyen d'acquérir l'ID de document généré après l'ajout d'un document à une collection?
Si j'ajoute un document à une collection qui représente une "publication" dans une application de média social, je souhaite obtenir cet identifiant de document et l'utiliser comme champ dans un autre document d'une collection différente.
Si je ne peux pas obtenir l'ID de document généré après l'ajout d'un document, devrais-je simplement calculer une chaîne aléatoire et fournir l'ID lors de la création du document? De cette façon, je peux utiliser la même chaîne que le champ de mon autre document?
Exemple de structure rapide:
POST (collection)
Document Id - randomly generated by firebase or by me
USER (collection)
Document Id - randomly generated by firebase
userPost: String (this will be the document id
in the post collection that I'm trying to get)
Oui c'est possible. Lorsque vous appelez la méthode .add
sur une collection, un objet DocumentReference est renvoyé. DocumentReference a le champ id
afin que vous puissiez obtenir l'ID après la création du document.
// Add a new document with a generated id.
db.collection("cities").add({
name: "Tokyo",
country: "Japan"
})
.then(function(docRef) {
console.log("Document written with ID: ", docRef.id);
})
.catch(function(error) {
console.error("Error adding document: ", error);
});
Cet exemple est en JavaScript. Visitez le documentation pour d’autres langues.
Je recommanderais d'utiliser la fonction grosse flèche car elle ouvre la possibilité d'utiliser this.foo même dans la fonction .then
db.collection("cities").add({
name: "Tokyo",
country: "Japan"
})
.then(docRef => {
console.log("Document written with ID: ", docRef.id);
console.log("You can now also access .this as expected: ", this.foo)
})
.catch(error => console.error("Error adding document: ", error))
Utiliser function (docRef) signifie que vous ne pouvez pas accéder à this.foo, et une erreur sera renvoyée
.then(function(docRef) {
console.log("Document written with ID: ", docRef.id);
console.log("You can now NOT access .this as expected: ", this.foo)
})
Les fonctions de flèche épaisse vous permettront d’accéder à this.foo comme prévu.
.then(docRef => {
console.log("Document written with ID: ", docRef.id);
console.log("You can now also access .this as expected: ", this.foo)
})
Si vous voulez utiliser async/await
au lieu de .then()
, vous pouvez l'écrire comme ceci:
const post = async (doc) => {
const doc_ref = await db.collection(my_collection).add(doc)
return doc_ref.id
}
Si vous voulez intercepter des erreurs dans cette fonction, incluez .catch()
:
const doc_ref = await db.collection(my_collection).add(doc).catch(err => { ... })
ou vous pouvez avoir la fonction appelante attraper l'erreur.