Cloud FireStore:使用查询检索1个文档

时间:2018-03-09 17:16:22

标签: javascript angular google-cloud-firestore

我试图从集合中检索单个文档。我现在使用下面的代码返回一个项目集合,但我知道只有一个项目。所以它不干净。

设置:

private db: AngularFirestore
private itemSubs: Subscription[] = [];
itemAd= new Subject<Item>();

fetchItemFromDatabase(itemId: string) {
    this.itemSubs.push(
      this.db.collection('items', id => id.where('itemId', '==', itemId)).valueChanges().subscribe((items: Item[]) => {
        this.itemAd.next(items);
      }));
  }

我尝试使用this.db.collection('items').doc(itemId).get()执行此操作,但我在get()上收到错误,因为它未找到/支持。在尝试调用此方法时,我也没有自动完成(在官方云火库文档中找到了方法)。

我看了一下其他一些解决方案,然后用this.db.collection('items').doc(itemId).ref.get().then(...)尝试了,但在这里我得到了一个空文档。

所以我现在有点陷入困境,当我知道其中只有一个项目时,我不想使用整个集合逻辑。

1 个答案:

答案 0 :(得分:1)

可能有多个文档itemId等于给定值。虽然您可能知道应用程序中只有一个,但数据库和API无法知道或强制执行。因此,您运行的查询将始终返回可能包含多个文档的查询快照。

this.db.collection('items', id => id.where('itemId', '==', itemId))

如果要强制只有一个文档具有给定的项目ID,请考虑将该项目ID用作文档名称,而不是将其存储为文档中的字段。

只能有一个具有给定名称的文档,这意味着ID保证是唯一的。然后,您可以使用以下方法检索该文档:

this.db.collection('items').doc(itemId)