我正在玩扑扑,但我遇到了火车店的问题,我无法弄清楚。
让我说我想检索一个客户的购买者历史,我有一个如下所述的firestore,所以我有一个“user”的集合,其中包含user_id的文档,然后在其中我有一个“产品”集合与包含product_id的文档的目的是收集所选用户的产品ID,然后从产品系列中检索产品价格?
我遇到的问题是,虽然我可以从用户表中获取产品的ID,但我无法看到一个简单的方法,我可以如何使用这些数据,如sql,我们将在product_id上进行简单的连接得到id匹配的价格?
任何帮助将非常感激。
编辑
感谢您回复Frank van Puffelen 2个seprate查询接缝合理,但它带来了第二个查询的其他问题,现在使用下面的代码我可以从用户获取documents_id然后对产品进行查询,一切看起来都不错所以我认为我正朝着正确的方向前进,因为我可以在循环中打印文档的id以确保我访问正确的文件,但是当我更改此文件以获取文档的快照时我无法访问其中的数据可能是我在做一些愚蠢或误解的东西,但与sql在尝试获取和处理数据时相比,这感觉非常尴尬。例如,如果我返回数据,它希望它以未来的形式>然而,一旦我以该格式返回数据,那么我就不能再以与我正在做的相同的方式访问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);
});
}
}
});