我需要查询 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 查询这个结构吗?或者有没有更好的结构可以实现?
最佳答案
您的实际查询不会返回预期结果,因为在“root”集合下不存在包含“paid”字段的文档。然而,有一个解决方案,您可以使用 collection group query但前提是您的子集合具有相同名称。由于子集合的名称是实际的用户 ID,因此该解决方案不适用。所以你只能做的是创建一个指向单个用户的引用:
root-->payment-->(user IDs)
并执行以下查询:
var query = FirebaseFirestore.instance
.collection("root").document("payment")
.collection(userId).where("paid", ">" ,0);
但是这个查询只会返回对应于单个用户的文档。
Is there any better structure to implement?
是的,有。请检查以下可能的结构:
Firestore-root
|
--- users (collection)
|
--- $uid (document)
|
--- payments (collection)
|
--- paymentid: 1234
|
--- paid: 50
这样就可以进行集合组查询,获取“paid”字段值大于0
的所有文档:
var db = FirebaseFirestore.instance;
var finalQuery = db.collectionGroup("payments").where("paid", ">", 0);
关于firebase - 如何使用flutter查询firestore中的子集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69450118/