programing

사용자 정의 ID를 가진 문서를 Firestore에 추가하는 방법

closeapi 2023. 7. 10. 22:20
반응형

사용자 정의 ID를 가진 문서를 Firestore에 추가하는 방법

파이어스토어 엔진에서 생성한 ID가 아닌 커스텀 생성된 ID로 파이어스토어 컬렉션에 문서를 추가할 수 있습니까?

사용해야 하는 사용자 정의 ID를 사용하려면.set,보다는.add

ID가 "LA"인 문서가 생성됩니다.

db.collection("cities").doc("LA").set({
    name: "Los Angeles",
    state: "CA",
    country: "USA"
})

이것은 여기 공식 문서에서 가져온 것입니다.

각화를 사용하는 경우,

class Component{
  constructor(private afs: AngularFireStore) {} // imported from @angular/fire/firestore

  addItem() {
    this.afs.collection('[your collection]').doc('[your ID]').set({your: "document"});
  }
}

버전 9를 찾는 사람이 있다면 여기에 두겠습니다.

이것은 문서에서 가져온 것입니다.

import { doc, setDoc } from "firebase/firestore"; 

// Add a new document in collection "cities" with "LA" as id
await setDoc(doc(db, "cities", "LA"), {
  name: "Los Angeles",
  state: "CA",
  country: "USA"
});

어디에db다음과 같습니다.

const firebaseApp = initializeApp(firebaseConfig)
const db = getFirestore(firebaseApp)

Firestore로 푸시하기 전에 클라이언트가 문서에 대해 임의의 ID를 생성하기를 원하는 경우(동일하다고 가정) 허용된 답변을 확장하기 위해createId()AngularFire2) 외부에 함수가 존재합니다.

const newId = db.createId();
db.collection("cities").doc(newId).set({
    name: "Los Angeles",
    state: "CA",
    country: "USA"
})

이것은 Firestore가 저장하기 전에도 ID를 다른 문서의 참조 필드로 설정하는 데 유용합니다.저장된 개체를 바로 사용할 필요가 없는 경우 ID를 기다리지 않고 처리 속도를 높입니다.set()이제 Angular에서 사용할 수 있는 파이프에서 호출이 비동기화되었습니다.

게시하지 않은 알림id: newIdFirestore는 기본적으로 ID를 문서의 필드로 저장하지 않기 때문에 설정된 오브젝트에서

이런 식으로 할 수 있습니다.

// Inject AngularFirestore as dependency 
private angularFireStore: AngularFirestore // from from 'angularfire2/firestore'

// set user object to be added into the document
let user = {
  id: this.angularFireStore.createId(),
  name: 'new user'
  ...
}

// Then, finally add the created object to the firebase document
angularFireStore.collection('users').doc(user.id).set(user);

db.collection("users").document(mAuth.getUid().set(user)

여기서 컬렉션의 이름은"users"문서 이름은 사용자의 이름입니다.UID

여기서 사용해야 합니다.set것은 아니다.add

private void storeData(String name, String email, String phone) {

    // Create a new user with a first and last name
    Map<String, Object> user = new HashMap<>();
    user.put("name", name);
    user.put("email", email);
    user.put("phone", phone);

    // Add a new document with a generated ID
    db.collection("users").document(mAuth.getUid()).set(user)
            .addOnSuccessListener(new OnSuccessListener<Void>() {
        @Override
        public void onSuccess(Void aVoid) {
            Toasty.success(context,"Register sucess",Toast.LENGTH_SHORT).show();
        }
    });
}

이것은 데이터로 문서를 작성하는 기능으로, 사용자가 직접 생성할지 자동 생성할지 선택할 수 있습니다.함수 호출 중에 id가 제공되면 생성될 문서에는 사용자가 제공한 id가 포함됩니다.

모듈식 Firebase Firestore 9.+

import { getFirestore, serverTimestamp, collection, doc, setDoc, addDoc } from 'firebase/firestore/lite'
async create(id = null, data) {
    const collectionRef = collection(getFirestore(), this.collectionPath)

    const dataToCreate = {
      ...data,
      createTimestamp: serverTimestamp(),
      updateTimestamp: serverTimestamp()
    }

    const createPromise =
      id === null || id === undefined
        ? // Create doc with generated id
          await addDoc(collectionRef, dataToCreate).then(d => d.id)
        : // Create doc with custom id
          await setDoc(doc(collectionRef, id), dataToCreate).then(() => id)

    const docId = await createPromise

    return {
      id: docId,
      ...data,
      createTimestamp: new Date(),
      updateTimestamp: new Date()
    }
  }

모듈식 Firebase Firestore가 아닌 경우에도 동일한 기능(< 버전 9)

import { firebase } from '@firebase/app'
async create(data, id = null) {
    const collectionRef = (await firestore()).collection(this.collectionPath)
    const serverTimestamp = firebase.firestore.FieldValue.serverTimestamp()

    const dataToCreate = {
      ...data,
      createTimestamp: serverTimestamp,
      updateTimestamp: serverTimestamp
    }

    const createPromise =
      id === null || id === undefined
        ? // Create doc with generated id
          collectionRef.add(dataToCreate).then(doc => doc.id)
        : // Create doc with custom id
          collectionRef
            .doc(id)
            .set(dataToCreate)
            .then(() => id)

    const docId = await createPromise

    return {
      id: docId,
      ...data,
      createTimestamp: new Date(),
      updateTimestamp: new Date()
    }
  }

먼저 주어진 코드는 자바스크립트용입니다. 이것은 안드로이드 스튜디오(JAVA)용입니다.

Map<String, Object> city = new HashMap<>();
city.put("name", "Los Angeles");
city.put("state", "CA");
city.put("country", "USA");
//Here LA is Document name for Assigning
db.collection("cities").document("LA")
    .set(city)
    .addOnSuccessListener(new OnSuccessListener<Void>() {
        @Override
        public void onSuccess(Void aVoid) {
            Log.d(TAG, "DocumentSnapshot successfully written!");
        }
    })
    .addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception e) {
            Log.w(TAG, "Error writing document", e);
        }
    });

데이터를 추가하는 동안 ID를 설정하려면 Set Method를 사용해야 합니다.

이 코드가 오래된 경우 여기에서 새 코드를 찾으십시오.

ID를 사용하여 새 문서 만들기

  createDocumentWithId<T>(ref: string, document: T, docId: string) {
    return this.afs.collection(ref).doc<T>(docId).set(document);
  }

EX: 이 예제에서는 전자 메일을 문서의 ID로 사용합니다.

this.fsService.createDocumentWithId('db/users', {}, credential.user.email);

생성된 사용자 지정 id not firestore를 추가하려면 다음을 수행합니다.

value:String=FirebaseAuth.getInstance().currentUser?uid.toString() FirebaseFirestore.getInstance().collection("샵 세부 정보").document(u).집합(데이터)

//u가 firestore에 있지 않습니다. 먼저 생성되고 데이터를 추가합니다. //firestore에 추가할 데이터는 무엇이든 됩니다.

많은 시간을 조사한 후에 나는 이것에 대한 해결책을 혼자 얻었습니다.

사실, 우리가 전에 String을 선언하고 해시맵에서 그것을 호출하면 작동하지 않을 것입니다.

솔루션은 다음과 같습니다.

 Map<String, Object> city = new HashMap<>();
                city.put("batch", "25");
                city.put("blood", ""+stuBlood.getText().toString());
                city.put("email", ""+stuEmail.getText().toString());
                city.put("facebook", ""+stuFacebook.getText().toString());
                city.put("gender", ""+stuGender.getText().toString());
                city.put("id", ""+stuID.getText().toString());
                city.put("image", ""+stuImage.getText().toString());
                city.put("location", ""+stuLocation.getText().toString());
                city.put("name", ""+stuName.getText().toString());
                city.put("phone", ""+stuPhone.getText().toString());
                city.put("whatsapp", ""+stuWhatsApp.getText().toString());
                city.put("telegram", ""+stuTelegram.getText().toString());

이제 작동하기를 바랍니다.

언급URL : https://stackoverflow.com/questions/48541270/how-to-add-document-with-custom-id-to-firestore

반응형