我知道Realtime Database
我可以push ID
像这样添加之前获取它:
DatabaseReference databaseReference= FirebaseDatabase.getInstance().getReference();
String challengeId=databaseReference.push().getKey();
然后可以使用此ID添加它。
我也可以在 Cloud Firestore?
我知道Realtime Database
我可以push ID
像这样添加之前获取它:
DatabaseReference databaseReference= FirebaseDatabase.getInstance().getReference();
String challengeId=databaseReference.push().getKey();
然后可以使用此ID添加它。
我也可以在 Cloud Firestore?
Answers:
this.db.collection('collections').ref.doc().id
const db = firebase.firestore();
const ref = db.collection('your_collection_name').doc();
const id = ref.id;
您可以按以下方式执行此操作(代码适用于AngularFire2 v5,类似于任何其他版本的Firebase SDK,例如网络,节点等)
const pushkey = this.afs.createId();
const project = {' pushKey': pushkey, ...data };
this.projectsRef.doc(pushkey).set(project);
projectsRef是Firestore集合参考。
数据是具有键,要上传到Firestore的值的对象。
AFS是在构造函数中注入angularfirestore模块。
这将在Collection处生成一个名为projectsRef的新文档,其ID为pushKey,并且该文档的pushKey属性与document的ID相同。
记住,设置还将删除所有现有数据
实际上.add()和.doc()。set()是相同的操作。但是使用.add()会自动生成ID,而使用.doc()。set()则可以提供自定义ID。
如果有帮助,则使用IDK,但我想从Firestore数据库中获取文档的ID,即已经输入到控制台中的数据。
我想要一种快速访问该ID的简单方法,因此我只是将其添加到文档对象中,如下所示:
const querySnapshot = await db.collection("catalog").get();
querySnapshot.forEach(category => {
const categoryData = category.data();
categoryData.id = category.id;
现在,我可以id
像访问其他任何属性一样访问它。
IDK为什么id
首先不是它的一部分.data()
!
最简单和更新(2019)的方法是对主要问题的正确答案:
“是否可以在添加ID之前获取ID?”
// Generate "locally" a new document in a collection
const document = yourFirestoreDb.collection('collectionName').doc();
// Get the new document Id
const documentUuid = document.id;
// Sets the new document (object that you want to insert) with its uuid as property
const response = await document.set({
...yourObjectToInsert,
uuid: documentUuid
});
不幸的是,这行不通:
let db = Firestore.firestore()
let documentID = db.collection(“myCollection”).addDocument(data: ["field": 0]).documentID
db.collection(“myOtherCollection”).document(documentID).setData(["field": 0])
它不起作用,因为第二条语句在documentID完成获取文档ID之前执行。因此,在设置下一个文档之前,您必须等待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
。
在dart中,您可以使用:
`var itemRef = Firestore.instance.collection("user")
var doc = itemRef.document().documentID; // this is the id
await itemRef.document(doc).setData(data).then((val){
print("document Id ----------------------: $doc");
});`
这对我有用。我在同一事务中更新文档。我创建了文档,并立即使用文档ID更新了该文档。
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")
}
}
}
}
找到一个更干净的方法会很高兴,但是在那之前这对我有用。
在Python上保存后获取ID:
doc_ref = db.collection('promotions').add(data)
return doc_ref[1].id
我们可以在文档中找到doc()
方法。他们将生成新的ID,并在此基础上创建新的ID。然后使用set()
方法设置新数据。
try
{
var generatedID = currentRef.doc();
var map = {'id': generatedID.id, 'name': 'New Data'};
currentRef.doc(generatedID.id).set(map);
}
catch(e)
{
print(e);
}