扑查询Firestore中的多个集合

时间:2018-08-01 22:19:50

标签: firebase google-cloud-firestore flutter

我在玩弄颤抖,但遇到了我无法弄清的Firestore问题。

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


  • users
    • user_id_1
      • products
        • purchace_id
          • product_id
          • quantity
  • products
    • product_id
      • product_desc
      • price

我遇到的问题是,虽然我可以从用户表中获取产品的ID,但是我无法看到一种简单的方式来使用此类数据(如sql),我们可以在其中进行简单的联接product_id以获取与ID匹配的价格?

任何帮助将不胜感激。

EDIT

感谢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;
  }

1 个答案:

答案 0 :(得分: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);
      });
    }
  }
});