一尘不染

扑查询firestore中的多个集合

flutter

我在玩弄颤抖,但遇到了我不知道的firestore问题。

假设我要检索客户的购买者历史记录,并且拥有一个如下所述的存储区,因此我在其中包含了一个包含user_id“ s
”文档的“用户”集合,然后在其中具有了“产品”集合与包含的文档product_id“我的目的是收集产品的ID为选定的用户,然后检索从产品集合产品价格?

  • 使用者

    • user_id_1
    • 产品展示
      • purchace_id
      • product_id
      • 数量
    • 产品展示

    • product_id

    • product_desc
    • 价钱

我遇到的问题是,虽然我可以从用户表中获取产品的ID,但随后看不到如何像SQL一样使用这种数据的简单方法,我们可以对product_id进行简单的联接获取与ID匹配的价格?

任何帮助将非常感激。


感谢您的答复Frank van Puffelen
2单独的查询接缝合理,但第二个查询带来了其他问题,因为现在使用下面的代码,我可以从用户那里获取documents_id,然后对产品进行查询,一切看起来都很好,所以我认为我朝着正确的方向前进,因为我可以在循环中打印文档的ID以确保我访问的是正确的ID,但是当我更改它以获取文档的快照时,我可能无法访问其中的数据一些愚蠢或误解的东西,但是在尝试获取和使用数据时,与sql相比,这感觉很尴尬。例如,如果我返回数据,它希望它以Future的形式出现,但是一旦我以该格式返回数据,则我将无法再像以前一样访问ID。

Future<List<DocumentSnapshot>> getSeedID() async{
    var data = await Firestore.instance.collection('users').document(widget.userId).collection('products').getDocuments();
    var productList = data.documents;
    print("Data length: ${productList.length}");
    for(int i = 0; i < productList.length; i++){
      var productId = Firestore.instance.collection('products').document(productList[i]['productId']).documentID;
      if(productId != null) {
        print("Data: " + productId);
      }
    }
    return productList;
  }

阅读 251

收藏
2020-08-13

共1个答案

一尘不染

简短的回答,我没有注意您如何使用未来

从用户表获取productId

  Future<List<DocumentSnapshot>> getProduceID() async{
    var data = await Firestore.instance.collection('users').document(widget.userId).collection('Products').getDocuments();
    var productId = data.documents;
    return productId;
  }

然后使用.then()调用此方法,而不是尝试将返回的数据应用于变量,因为这不是将来的工作方式

  var products;
  getProduceID().then((data){
  for(int i = 0; i < s.length; i++) {
    products = Firestore.instance.collection('products')
        .document(data[i]['productID'])
        .snapshots();
    if (products != null) {
      products.forEach((product) {
        print(product.data.values);
      });
    }
  }
});
2020-08-13