Ответ 1
Это описано в документации . См. Последний абзац раздела добавления документа.
DocumentReference ref = db.collection("my_collection").document();
String myId = ref.getId();
Я знаю, что в Realtime Database
в Realtime Database
я мог получить push ID
прежде чем он был добавлен следующим образом:
DatabaseReference databaseReference= FirebaseDatabase.getInstance().getReference();
String challengeId=databaseReference.push().getKey();
и тогда я мог бы добавить его, используя этот идентификатор.
Могу ли я получить его также в Cloud Firestore?
Это описано в документации . См. Последний абзац раздела добавления документа.
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 - сборник firestore ref.
data - это объект с ключом, значение, которое вы хотите загрузить в firestore.
afs - модуль углового фильтра, введенный в конструктор
Вы можете сделать это следующим образом (код для AngularFire2 v5, который похож на любую другую версию firebase SDK, например, web, node и т.д.)
const pushkey = this.afs.createId();
const project = {' pushKey': pushkey, ...data };
this.projectsRef.doc(pushkey).set(project);
Это создаст новый документ в коллекции под названием projectsRef с его идентификатором в pushKey, и этот документ будет иметь свойство pushKey так же, как id документа
Помните, что установка также удалит все существующие данные
Фактически .add() и .doc(). set() совпадают с .add(), идентификатор автоматически генерируется, с .doc(). set() вы можете предоставить пользовательский идентификатор.
IDK, если это поможет, но я хотел получить идентификатор для документа из базы данных Firestore, то есть данных, которые уже были введены в консоль.
Я хотел простой способ получить доступ к этому идентификатору на лету, поэтому я просто добавил его к объекту документа следующим образом:
const querySnapshot = await db.collection("catalog").get();
querySnapshot.forEach(category => {
const categoryData = category.data();
categoryData.id = category.id;
Теперь я могу получить доступ к этому id
же, как и к любому другому свойству.
IDK, почему id
- это не просто часть .data()
!
К сожалению, это не будет работать:
let db = Firestore.firestore()
let documentID = db.collection("myCollection").addDocument(data: ["field": 0]).documentID
db.collection("myOtherCollection").document(documentID).setData(["field": 0])
Это не работает, потому что второй оператор выполняется до того, как documentID завершит получение идентификатора документа. Итак, вам нужно подождать, пока documentID завершит загрузку, прежде чем устанавливать следующий документ:
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])
}
Это не самая красивая, но это единственный способ сделать то, что вы просите. Этот код в Swift 5
.
Это работает для меня. Я обновляю документ, находясь в той же транзакции. Я создаю документ и немедленно обновляю документ идентификатором документа.
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")
}
}
}
}
Было бы неплохо найти более чистый способ сделать это, но до тех пор это работает для меня.
В дартс вы можете использовать:
'var itemRef = Firestore.instance.collection("user")
var doc = itemRef.document().documentID;
await itemRef.document(doc).setData(data).then((val){
print("document Id ----------------------: $doc");
});'