我在玩弄颤抖,但遇到了我不知道的firestore问题。
假设我要检索客户的购买者历史记录,并且拥有一个如下所述的存储区,因此我在其中包含了一个包含user_id“ s ”文档的“用户”集合,然后在其中具有了“产品”集合与包含的文档product_id“我的目的是收集产品的ID为选定的用户,然后检索从产品集合产品价格?
user_id
product_id
使用者
产品展示
我遇到的问题是,虽然我可以从用户表中获取产品的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; }
简短的回答,我没有注意您如何使用未来
从用户表获取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); }); } } });