Je sais que dans Realtime Database
je pourrais obtenir le Push ID
avant qu'il ne soit ajouté comme ceci:
DatabaseReference databaseReference= FirebaseDatabase.getInstance().getReference();
String challengeId=databaseReference.Push().getKey();
et puis je pourrais l'ajouter en utilisant cet identifiant.
Puis-je l'obtenir aussi dans le Cloud Firestore?
Ceci est couvert dans le documentation . Voir le dernier paragraphe de la section Ajouter un document.
DocumentReference ref = db.collection("my_collection").document();
String myId = ref.getId();
const db = firebase.firestore();
const ref = db.collection('your_collection_name').doc();
const id = ref.id;
projectsRef est une collection de produits de stockage.
data est l'objet avec la clé, la valeur que vous souhaitez télécharger sur le magasin de feu.
afs est le module angularfirestore injecté dans le constructeur
Vous pouvez le faire de la manière suivante (le code est destiné à AngularFire2 v5, qui est similaire à toute autre version de SDK firebase, telle que Web, noeud, etc.).
const pushkey = this.afs.createId();
const project = {' pushKey': pushkey, ...data };
this.projectsRef.doc(pushkey).set(project);
Cela va générer un nouveau document chez Collection appelé projectsRef avec son identifiant chez pushKey et ce document aura la propriété pushKey identique à celle du document.
Rappelez-vous, set supprimera également toutes les données existantes
En fait .add () et .doc (). Set () sont identiques à .add () l'identifiant est généré automatiquement. Avec .doc (). Set (), vous pouvez fournir un identifiant personnalisé.
IDK si cela aide, mais je voulais obtenir l'ID du document à partir de la base de données Firestore, c'est-à-dire des données déjà entrées dans la console.
Je voulais un moyen facile d'accéder à cet ID à la volée, alors je l'ai simplement ajouté à l'objet document comme suit:
const querySnapshot = await db.collection("catalog").get();
querySnapshot.forEach(category => {
const categoryData = category.data();
categoryData.id = category.id;
Maintenant, je peux accéder à cette id
comme n'importe quelle autre propriété.
IDK pourquoi la id
ne fait pas simplement partie de .data()
!
Malheureusement, cela ne fonctionnera pas:
let db = Firestore.firestore()
let documentID = db.collection(“myCollection”).addDocument(data: ["field": 0]).documentID
db.collection(“myOtherCollection”).document(documentID).setData(["field": 0])
Cela ne fonctionne pas car la deuxième instruction s'exécute avant que documentID ait fini d'obtenir l'ID du document. Donc, vous devez attendre que documentID termine le chargement avant de définir le document suivant:
let db = Firestore.firestore()
var documentRef: DocumentReference?
documentRef = db.collection(“myCollection”).addDocument(data: ["field": 0]) { error in
guard error == nil, let documentID = documentRef?.documentID else { return }
db.collection(“myOtherCollection”).document(documentID).setData(["field": 0])
}
Ce n'est pas la plus jolie, mais c'est la seule façon de faire ce que vous demandez. Ce code est dans Swift 5
.
Cela fonctionne pour moi. Je met à jour le document alors que dans la même transaction. Je crée le document et le mets immédiatement à jour avec l'ID de document.
let db = Firestore.firestore().collection(“cities”)
var ref: DocumentReference? = nil
ref = db.addDocument(data: [
“Name” : “Los Angeles”,
“State: : “CA”
]) { err in
if let err = err {
print("Error adding document: \(err)")
} else {
print("Document added with ID: \(ref!.documentID)")
db.document(ref!.documentID).updateData([
“myDocumentId” : "\(ref!.documentID)"
]) { err in
if let err = err {
print("Error updating document: \(err)")
} else {
print("Document successfully updated")
}
}
}
}
Ce serait bien de trouver un moyen plus propre de le faire, mais jusque-là cela fonctionne pour moi.
Dans Dart, vous pouvez utiliser:
`var itemRef = Firestore.instance.collection("user")
var doc = itemRef.document().documentID;
await itemRef.document(doc).setData(data).then((val){
print("document Id ----------------------: $doc");
});`