【问题标题】:Return nested collection from firestore as object for angularfire2 and firebase从firestore返回嵌套集合作为angularfire2和firebase的对象
【发布时间】:2018-04-02 13:42:20
【问题描述】:

假设您有以下结构:

shopping-carts (collection)
 - shopping-cart 1(doc)
  -- dateCreated (field)
  -- items (collection)
 - shopping-cart 2(doc
  -- dateCreated
  -- items
 .
 .
 .

那么,我们如何将整个购物车(doc)作为我们定义为的 ShoppingCart 对象来获取

export interface ShoppingCart {
  items: ShoppingCartItem[]
  dateCreated: string
}

afs.doc('shopping-cart/id').valueChanges() 只返回创建日期

afs.doc('shopping-cart/id').collection('items').valueChanges() 返回项目。

将所有内容合二为一并将其创建为对象的简单方法?

【问题讨论】:

    标签: angular firebase angularfire2 google-cloud-firestore


    【解决方案1】:

    可能不是最好的解决方案,但还没有找到更好的解决方案。

    this.shoppingCartsCollection = afs.collection<Servicio>('shopping-carts', 
            ref => ref.orderBy('dateCreated', 'asc'));
    
    this.shoppingCarts = this.shoppingCartsCollection
        .snapshotChanges()
        .map(values => {
           return values.map(value => {
    
              const shopping-cart = value.payload.doc.data();
              const itemsArray = shopping-cart.items;
              shopping-cart.observableItems = [];
    
              for (var i = 0, len = itemsArray.length; i < len; i++) {
                 itemDocRef = itemsArray[i];
                 value.observableItems.push(afs.doc('items/'+ itemDocRef.id).valueChanges());
              }
    
              return shopping-cart;
           });
        });
    

    访问您的商品数据,就像任何其他可观察的一样

    <div *ngFor="let shoppingCart of shoppingCarts | async">
       <p *ngFor="let observableItem of shoppingCart.observableItems">
          {{(observableItem | async)?.displayName}}
       </p> 
    </div>
    

    【讨论】:

    • 我其实也有同样的情况。唯一对我不起作用的是我实际上没有得到项目集合。
    • 也许我忽略了一些琐碎的事情,但是如果 Firebase 是一个文档数据库,为什么我不能一次调用检索整个文档,包括它的嵌套集合?我错过了文档数据库的意义吗?
    猜你喜欢
    • 2021-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-27
    • 2020-09-09
    • 1970-01-01
    • 2018-06-27
    相关资源
    最近更新 更多