【发布时间】:2020-09-07 00:16:12
【问题描述】:
我在 Firestore Collection 返回的 Flutter Stream Builder 中找不到如何使用多个 where 子句的文档或示例。
下面的查询有效
Firestore
.instance
.collection (collectionName)
.where ("index", arrayContains: search)
.orderBy ('date', descending: true )
.snapshots()
但如果我添加一个额外的 where 子句,则返回零
Firestore
.instance
.collection (collectionName)
.where ("index", arrayContains: search)
.where ('allowed_roles', arrayContains: GlobalVars.userRole.toString() )
.orderBy ('date', descending: true )
.snapshots()
Firebase 文档中的复合查询示例看起来与上面差不多,但缺少 Flutter 或 Dart 示例。
编辑:
我也尝试过查询构建模式作为解决方法,但它也不起作用。 Flutter 真的不希望arrayContains 子句不止一次。
CollectionReference collectionRef = Firestore.instance.collection (collectionName);
Query p = collectionRef.where ('allowed_roles', arrayContains: "3");
Query q = p.where ('index', arrayContains: "Dan");
Stream s = q.snapshots();
我在这里缺少的是程序员应该使用什么解决方案来解决这个问题,逻辑与是一个非常基本的等式,坚持这个功能是不寻常的。
【问题讨论】:
-
您的代码似乎没有任何错误检查。你有错误吗?它说什么?究竟是什么不符合您的预期?
-
没有错误,只要我使用两个 where 子句,它就会表现为一个空查询,并且只要您提供一个或其他 where 子句,它就会开始工作。所以很明显,查询不是排他的。这篇文章解释说,flutter 遵循“构建查询模式”stackoverflow.com/questions/50316462/… 但构建查询模式破坏了 Stream Builder,所以我仍在检查一个合法的源代码应该如何编写
-
你确定没有错误吗?文档建议每个查询不能有多个包含数组的过滤器。
-
不,我的日志中没有任何内容,应用程序的行为就像查询没有返回任何内容一样。它不会卡住它自己执行它而没有任何错误。所以你提到每个查询一个数组过滤器是有道理的。现在的问题是在这种情况下如何执行逻辑与
-
我会指出你没有代码做实际的错误检查。我不希望所有内容都显示在日志中。并且文档表明您不能有两个包含数组的过滤器。 firebase.google.com/docs/firestore/query-data/…
标签: flutter dart google-cloud-firestore