Realtime Database
で次のように追加される前にPush ID
を取得できたことを知っています。
DatabaseReference databaseReference= FirebaseDatabase.getInstance().getReference();
String challengeId=databaseReference.Push().getKey();
このIDを使用して追加できます。
Cloud Firestore?
でも取得できますか
これは documentation で説明されています。ドキュメントの追加セクションの最後の段落を参照してください。
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コレクションの参照です。
dataは、firestoreにアップロードするキー、値を持つオブジェクトです。
afsは、コンストラクターに挿入されたanglefirestoreモジュールです
これは次の方法で行うことができます(コードはAngularFire2 v5用です。これは、Firebase SDKの他のバージョン、たとえばweb、ノードなどに似ています)
const pushkey = this.afs.createId();
const project = {' pushKey': pushkey, ...data };
this.projectsRef.doc(pushkey).set(project);
これにより、pushKeyにidを持つprojectsRefという新しいドキュメントがCollectionに生成され、そのドキュメントにはdocumentのidと同じpushKeyプロパティが設定されます
Setは既存のデータも削除することを忘れないでください
実際、.add()と.doc()。set()は.add()と同じです。idは自動生成されます。doc()。set()を使用すると、カスタムIDを指定できます。
IDKはこれで役に立ちますが、ドキュメントのIDをFirestoreデータベース(つまり、コンソールに既に入力されているデータ)から取得したかったのです。
そのIDにオンザフライでアクセスする簡単な方法が必要だったため、次のようにドキュメントオブジェクトに追加しました。
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がドキュメントのIDの取得を完了する前に2番目のステートメントが実行されるため、機能しません。そのため、次のドキュメントを設定する前に、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
にあります。
これは私のために動作します。同じトランザクションでドキュメントを更新します。ドキュメントを作成し、すぐにドキュメント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")
}
}
}
}
よりクリーンな方法を見つけられればいいのですが、それまではこれでうまくいきます。
Dartでは次を使用できます。
`var itemRef = Firestore.instance.collection("user")
var doc = itemRef.document().documentID;
await itemRef.document(doc).setData(data).then((val){
print("document Id ----------------------: $doc");
});`