我有类似Customer ->documnetid→订单(收款)与所有客户相同。我需要在一个列表中显示所有客户的订单列表。如果客户再次订购商品,则需要创建另一个列表。
FirebaseFirestore.instance
.collection("customer")
.doc('a44d4c1b-7faa-4139-b707-a40499fe4ce5')
.collection("orders")
.where('orderStatus', isEqualTo: 'ordered')
.snapshots(),
如果我提供特定的文档id,我可以获得数据。但我需要得到所有顾客的订单。请帮帮我。谢谢你
您应该使用Collection Group查询,正如Firebase文档和Dartcloud_firestore
包文档中所解释的那样。
下面的内容:
FirebaseFirestore.instance
.collectionGroup("orders")
.where('orderStatus', isEqualTo: 'ordered')
.get()
.then((QuerySnapshot querySnapshot) {
querySnapshot.docs.forEach((doc) {
//...
});
});
您需要更改您的数据结构。例如,您可以为具有相同字段+客户id字段的订单创建一个新的不同的单独集合。
所以你可以得到所有的订单和订单的客户id
所以如果你想获得一个特定客户的订单,你可以通过这个:
FirebaseFirestore.instance
.collection("orders")
.where('customerId', isEqualTo: 'a44d4c1b-7faa-4139-b707-a40499fe4ce5')
.snapshots(),
你可以得到所有这样的命令:
FirebaseFirestore.instance
.collection("orders")
.snapshots(),
或者如果你仍然想用你的数据结构来做你可以用loop
List orders = [];
FirebaseFirestore.instance
.collection('customer')
.get().then((QuerySnapshot querySnapshot) {
querySnapshot.docs.forEach((doc) {
dynamic data = doc.data();
orders.addAll(data['orders'] as List);
});
});