Как получить конкретные данные документа с идентификатором? | AngularFire 5.1.1 | Облачный Пожарный Магазин | документы - PullRequest
0 голосов
/ 07 января 2019

Я использую сервис доступа к данным, чтобы получить данные из пожарного магазина Firebase.

Как использовать метод snapshotChanges () для получения определенных данных документа с идентификатором

getProduct(id: number): Observable<Product> {
    this.productsDocuments = this.angularfirestore.doc<Product>('products/' + id);
    this.product = this.productsDocuments.snapshotChanges().pipe(
      map(changes => changes.map(a => {
        const data = a.payload.doc.data() as Product;
        const id = a.payload.doc.id;
        return { id, ...data };
      }))
    );
    return this.product

Я хочу this.product возвращает значение документа и идентификатор документа

Спасибо !!

1 Ответ

0 голосов
/ 07 января 2019

документ - это просто объект {[field]: value} а коллекция представляет собой контейнер для документов [document]

вы пытаетесь получить один документ, он же объект, и проблема в том, что вы не можете отобразить его напрямую, я думаю, что вы хотите получить всю коллекцию, если! карту можно узнать по всем документам

getProduct(id: number): Observable<Product> { const productsDocuments = this.db.doc<Product>('products/' + id); return productsDocuments.snapshotChanges() .pipe( map(changes => { const data = changes.payload.data(); const id = changes.payload.id; return { id, ...data }; })) }

для коллекции

getProduct(id: string): Observable<Product[]> { const productsDocuments = this.db.collection<Product[]>('products'); return productsDocuments.snapshotChanges() .pipe( map(changes => changes.map(({ payload: { doc } }) => { const data = doc.data(); const id = doc.id return { id, ...data }; })), map((products) => products.find(doc => doc.id === id))) }

извините за плохой английский

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...