AngularFire Firestore在通过自定义键查询集合后获取单个文档

时间:2018-02-14 19:03:17

标签: angular collections rxjs document google-cloud-firestore

我是Angular和Firebase世界的新手,所以我遇到了一个我无法解决的问题。

我想通过除id之外的自定义键来查找文档。所以我建立了一个服务:

import { Injectable } from '@angular/core';
import { AngularFirestore, AngularFirestoreCollection, AngularFirestoreDocument } from 'angularfire2/firestore';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/mergeMap'
import { Product, ProductId } from './models';

@Injectable()
export class ProductsService {
  productsCollection: AngularFirestoreCollection<Product>;
  products: Observable<ProductId[]>;
  product: Observable<Product>;

  constructor(public afs: AngularFirestore) { 
    this.productsCollection = this.afs.collection<Product>('products');
  }

  getProduct(query) : Observable<Product> {
    if(query.id) {
      this.product = this.productsCollection.doc<Product>(query.id).valueChanges();
      return this.product;
    } else if(query.url) {
      this.product = this.afs.collection<Product>('products', ref => ref.where('url', '==', query.url)
      .limit(1)).valueChanges().flatMap(result => result);
      return this.product;
    }
  }
}

getProduct(query)

函数应该能够以两种方式获取文档 - 通过id和doc

中的自定义唯一字段
query: { 'url': 'CUSTOM KEY'}

但第二个不起作用。我想重新调整一个Observable文件,就像我在用id看时一样。我怎样才能做到这一点? 在当前代码中,我收到编译器错误。

0 个答案:

没有答案