我需要查询Firestore和Firestore结构:
root-->payment-->(user IDs)--->(random doc ID)-->(data like paymentid: 1234, paid: 50)
(col) (doc) (col) (doc) (fields)
我的查询就像我需要获得paid>0
是我查询的所有值。
我试过的是?
var query = FirebaseFirestore.instance;
query.collection("root").where("paid",">",0);
但是没有返回任何数据,我知道这不是正确的格式。如何才能做到这一点?
我甚至可以使用Flutter查询该结构吗?或者有没有更好的结构可以实施?
您的实际查询将不会返回预期的结果,因为在"根"托收中没有包含"已付款"字样的单据字段。然而,有一种解决方案,您可以使用集合组查询,但前提是您的子集合将具有相同的名字由于子集合的名称是实际的用户id,因此不适用此解决方案。所以你只能创建一个指向单个用户的引用:
root-->payment-->(user IDs)
,并执行如下查询:
var query = FirebaseFirestore.instance
.collection("root").document("payment")
.collection(userId).where("paid", ">" ,0);
但是这个查询将只返回与单个用户对应的文档。
是否有更好的结构来实现?
是的,有。请检查下面可能的结构:
Firestore-root
|
--- users (collection)
|
--- $uid (document)
|
--- payments (collection)
|
--- paymentid: 1234
|
--- paid: 50
通过这种方式,您可以执行集合组查询并获得"已付费"的所有文档。字段保存的值大于0
:
var db = FirebaseFirestore.instance;
var finalQuery = db.collectionGroup("payments").where("paid", ">", 0);