首页 > 解决方案 > 如何使用 Firestore 和 Angular 从数组中查询对象

问题描述

我正在尝试从 Firestore 查询一个对象, uid因此我可以将以下对象作为值返回。

我试图制作一个函数来获取对象“香蕉”

getFruit(fruitUid: string, basketUid: string): Promise<any> {
    const basketRef = this.afs.doc(`basket/${basketUid}`).ref;

    return this.afs.firestore.runTransaction((ts) => {
      return ts.get(basketUid).then((sfDoc) => {
        return sfDoc.data().fruits
        .filter(fruit => fruit.uid === fruitUid);
      });
    });
  }

现在我收到以下错误:FirebaseError: Every document read in a transaction must also be written.

这是数据库的样子:

fruits: [
  {
    uid: '123ABC',
    name: 'Banana'
  },
  {
    uid: 'ABC123',
    name: 'Apple'
]
createdAt: 2019-04-20

有没有办法通过指定来获取该特定对象,uid以便我可以fruit从数组中返回一个特定对象fruits

标签: angulartypescriptfirebasegoogle-cloud-firestore

解决方案


对于单个文档检索,您不需要事务:

getFruit(fruitUid: string, basketUid: string): Promise<any> {
    const basketRef = this.afs.doc(`basket/${basketUid}`);

    return basketRef.get().then((sfDoc) => {
      return sfDoc.data().fruits
      .filter(fruit => fruit.uid === fruitUid);
    });
}

推荐阅读