programing

Firestore 컬렉션에서 문서 ID를 가져오는 중

bestprogram 2023. 6. 11. 11:07

Firestore 컬렉션에서 문서 ID를 가져오는 중

아이디로 서류를 검색하려고 하는데 알 수가 없어요.
현재 다음과 같이 문서를 검색합니다.

const racesCollection: AngularFirestoreCollection<Races> = this.afs.collection('races');
return racesCollection.valueChanges();

나는 내 문서 목록을 완벽하게 받긴 하지만, 그 문서들에는 did가 없습니다.

각 문서에 대해 어떻게 검색할 수 있습니까?

Angular 8 및 Firebase 6의 경우 옵션 ID 필드를 사용할 수 있습니다.

      getAllDocs() {
           const ref = this.db.collection('items');
           return ref.valueChanges({idField: 'customIdName'});
      }

지정된 키(customIdName)를 가진 개체에 문서 ID를 추가합니다.

컬렉션의 문서 ID를 가져오려면 다음을 사용해야 합니다.snapshotChanges()

    this.shirtCollection = afs.collection<Shirt>('shirts');
    // .snapshotChanges() returns a DocumentChangeAction[], which contains
    // a lot of information about "what happened" with each change. If you want to
    // get the data and the id use the map operator.
    this.shirts = this.shirtCollection.snapshotChanges().map(actions => {
      return actions.map(a => {
        const data = a.payload.doc.data() as Shirt;
        const id = a.payload.doc.id;
        return { id, ...data };
      });
    });

설명서 https://github.com/angular/angularfire2/blob/7eb3e51022c7381dfc94ffb9e12555065f060639/docs/firestore/collections.md#example

드디어 해결책을 찾았습니다.빅터는 문서 자료와 가까웠습니다.

const racesCollection: AngularFirestoreCollection<Race>;
return racesCollection.snapshotChanges().map(actions => {       
  return actions.map(a => {
    const data = a.payload.doc.data() as Race;
    data.id = a.payload.doc.id;
    return data;
  });
});

ValueChanges()에는 메타데이터가 포함되어 있지 않으므로 문서 ID가 필요할 때 SnapshotChanges()를 사용하고 여기에 명시된 대로 올바르게 매핑해야 합니다. https://github.com/angular/angularfire2/blob/master/docs/firestore/collections.md

각도 6+의 경우

    this.shirtCollection = afs.collection<Shirt>('shirts');
    this.shirts = this.shirtCollection.snapshotChanges().pipe(
        map(actions => {
        return actions.map(a => {
            const data = a.payload.doc.data() as Shirt;
            const id = a.payload.doc.id;
            return { id, ...data };
        });
        })
    );

doc.idUID를 가져옵니다.

다음과 같이 하나의 개체에 대해 나머지 데이터와 결합합니다.

Object.assign({ uid: doc.id }, doc.data())

angularFire를 사용하고 있기 때문에 구현을 위한 기본 Firebase 메서드로 돌아가는 것은 의미가 없습니다.AngularFire 자체에는 적절한 메커니즘이 구현되어 있습니다.그냥 사용하면 됩니다.

valueChanges()method of angularFire는 객체를 메소드에 매개 변수로 추가하기만 하면 컬렉션의 각 문서의 ID를 가져오기 위한 오버로드를 제공합니다.

valueChanges({ idField: 'id' })

여기서 'idField'는 그대로여야 합니다.'id'는 문서 ID를 호출할 수 있습니다.

그러면 반환된 배열의 각 문서 개체는 다음과 같이 나타납니다.

{
  field1 = <field1 value>,
  field2 = <field2 value>,
  ..
  id = 'whatEverTheDocumentIdWas'
}

그런 다음 이름을 지정한 필드를 참조하여 문서 ID를 쉽게 가져올 수 있습니다.

Angular Fire 5.2.0

데이터베이스에 문서를 추가하기 전에 ID를 가져올 수 있습니다.

var idBefore =  this.afs.createId();
console.log(idBefore);

컬렉션이 아닌 문서 참조의 경우 다음이 필요합니다.

// when you know the 'id'

this.afs.doc(`items/${id}`)
  .snapshotChanges().pipe(
    map((doc: any) => {
      const data = doc.payload.data();
      const id = doc.payload.id;
      return { id, ...data };
    });

~하듯이.valueChanges({ idField: 'id'});여기서는 작동하지 않습니다.일반적으로 id로 문서를 검색하기 때문에 구현되지 않은 것 같습니다...

먹어봤어요.

return this.db.collection('items').snapshotChanges().pipe(
          map(actions => {       
            return actions.map(a => {
              const data = a.payload.doc.data() as Item;
              data.id = a.payload.doc.id;
              data.$key = a.payload.doc.id;
              return data;
            });
          })
        );

언급URL : https://stackoverflow.com/questions/46900430/firestore-getting-documents-id-from-collection