programing

ID가 추가되기 전에 ID를 얻을 수 있습니까?

i4 2023. 6. 5. 23:36
반응형

ID가 추가되기 전에 ID를 얻을 수 있습니까?

실시간 데이터베이스에서 다음 정보를 얻을 수 있습니다.push ID다음과 같이 추가되기 전:

 DatabaseReference databaseReference= FirebaseDatabase.getInstance().getReference();
 String challengeId=databaseReference.push().getKey();

그리고 이 아이디로 추가할 수 있습니다.

클라우드 파이어 스토어에서도 구매할 수 있습니까?

이 내용은 설명서에서 다룹니다.문서 추가 섹션의 마지막 단락을 참조하십시오.

DocumentReference ref = db.collection("my_collection").doc();
String myId = ref.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);

projectRef는 화재 저장소 수집 참조입니다.

데이터는 Firestore에 업로드할 키, 값이 있는 개체입니다.

afs는 생성자에 주입된 각진 파이어스토어 모듈입니다.

그러면 ID가 pushKey인 projectsRef라는 새 문서가 Collection에서 생성되고 해당 문서는 ID가 document와 동일한 pushKey 속성을 가집니다.

세트는 기존 데이터도 삭제합니다.

실제로 .add()와 .doc().set()은 동일한 작업입니다.그러나 .add()를 사용하면 ID가 자동으로 생성되고 .doc()을 사용하면 사용자 지정 ID를 제공할 수 있습니다.

주요 질문에 대한 정답인 가장 간단하고 업데이트된 (2022) 방법:

"ID가 추가되기 전에 ID를 얻을 수 있습니까?

v8:

    // 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 with its uuid as property
    const response = await document.set({
          uuid: documentUuid,
          ...
    });

v9:

    // Get the collection reference
    const collectionRef = collection(yourFirestoreDb,'collectionName');

    // Generate "locally" a new document for the given collection reference
    const docRef = doc(collectionRef); 

    // Get the new document Id
    const documentUuid = docRef.id;

    //  Sets the new document with its uuid as property
    await setDoc(docRef, { uuid: documentUuid, ... }) 

파이어베이스 9

doc(collection(this.afs, 'posts')).id;

도움이 된다면 IDK입니다만, Firestore 데이터베이스에서 문서의 ID, 즉 콘솔에 이미 입력된 데이터를 얻고 싶었습니다.

저는 즉시 해당 ID에 액세스할 수 있는 쉬운 방법이 필요했기 때문에 다음과 같이 문서 개체에 추가했습니다.

const querySnapshot = await db.collection("catalog").get();
      querySnapshot.forEach(category => {
        const categoryData = category.data();
        categoryData.id = category.id;

이제 액세스할 수 있습니다.id내가 다른 재산들과 마찬가지로.

왜 그런지 알겠어요.id의 일부만이 아닙니다..data()애초에!

node.js 런타임의 경우

const documentRef = admin.firestore()
  .collection("pets")
  .doc()

await admin.firestore()
  .collection("pets")
  .doc(documentRef.id)
  .set({ id: documentRef.id })

이렇게 하면 임의의 ID를 가진 새 문서를 만든 다음 문서 내용을 다음으로 설정합니다.

{ id: new_document_id }

이것이 어떻게 작동하는지 잘 설명되기를 바랍니다.

유감스럽게도 이 방법은 작동하지 않습니다.

let db = Firestore.firestore()

let documentID = db.collection(“myCollection”).addDocument(data: ["field": 0]).documentID

db.collection(“myOtherCollection”).document(documentID).setData(["field": 0])

문서 앞에 두 번째 문이 실행되므로 작동하지 않습니다.ID 문서의 ID 가져오기가 완료되었습니다.그래서 당신은 서류를 기다려야 합니다.다음 문서를 설정하기 전에 로드를 완료할 ID:

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에 대한 문서

다음 문서에서 확인할 수 있습니다.doc()방법.그들은 새 ID를 생성하고 그 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);
}

새로운 Firebase 9(2022년 1월)용.제 경우에는 다음과 같은 설명 섹션을 개발하고 있습니다.

const commentsReference = await collection(database, 'yourCollection');
await addDoc(commentsReference, {
  ...comment,
  id: doc(commentsReference).id,
  date: firebase.firestore.Timestamp.fromDate(new Date())
});

수집 참조를 래핑합니다(commentsReference)을 사용하여 식별자(id)

이제 ID를 로컬로 생성하여(v9 2022 업데이트) 가능합니다.

import { doc, collection, getFirestore } from 'firebase/firestore'

const collectionObject = collection(getFirestore(),"collection_name") 
const docRef = doc(collectionObject)

console.log(docRef.id) // here you can get the document ID

선택사항: 다음과 같은 문서를 만들 수 있습니다.

setDoc(docRef, { ...docData })

이것이 누군가에게 도움이 되기를 바랍니다.건배!

Python에 저장한 후 ID를 가져오는 방법

doc_ref = db.collection('promotions').add(data)
return doc_ref[1].id

다트에서 사용할 수 있는 항목:

`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");
 });`

하고 호출하지 "Firestore-ish ID"를 생성할 수 .collection("name").doc(myID).set(dataObj)collection("name").add(dataObj)ID가 없는 경우 Firebase는 자동으로 문서를 작성합니다.

도우미 방법:

/**
 * generates a string, e.g. used as document ID
 * @param {number} len length of random string, default with firebase is 20
 * @return {string} a strich such as tyCiv5FpxRexG9JX4wjP
 */
function getDocumentId (len = 20): string {
  const list = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXYZ123456789";
  let res = "";
  for (let i = 0; i < len; i++) {
    const rnd = Math.floor(Math.random() * list.length);
    res = res + list.charAt(rnd);
  }
  return res;
}

용도:const myId = getDocumentId().

이것은 나에게 효과가 있습니다.저는 같은 거래를 하는 동안 문서를 업데이트합니다.나는 문서를 작성하고 문서 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")
                    }
                }
            }
        }

좀 더 깨끗한 방법을 찾으면 좋겠지만 그때까지는 이것이 저에게 효과가 있습니다.

노드 내

var id = db.collection("collection name").doc().id;

ID가 필요할 때 수집 내용을 모를 경우:

Firestore에서 ID를 생성하는 데 사용하는 코드는 다음과 같습니다.

const generateId = (): string => {
  // Alphanumeric characters
  const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
  let autoId = '';
  for (let i = 0; i < 20; i++) {
    autoId += chars.charAt(Math.floor(Math.random() * chars.length));
  }
  // assert(autoId.length === 20, "Invalid auto ID: " + autoId);
  return autoId;
};

참조:

소방서:ID는 컬렉션에서 고유합니까, 아니면 전체적으로 고유합니까?

https://github.com/firebase/firebase-js-sdk/blob/73a586c92afe3f39a844b2be86086fddb6877bb7/packages/firestore/src/util/misc.ts#L36

언급URL : https://stackoverflow.com/questions/46844907/is-it-possible-to-get-the-id-before-it-was-added

반응형