Flutter firestore queryBuilder中的多个where查询

Flutter firestore queryBuilder中的多个where查询,flutter,dart,google-cloud-firestore,Flutter,Dart,Google Cloud Firestore,今天我注意到,每当我想查询数据库时,我都会遇到一个错误,这个错误对我来说毫无意义,查询就停止了。几周前效果还不错 无效的查询。所有这些过滤器都带有一个不等式(lessThan, lessThanOrEqual、greaterThan或greaterThanOrEqual)必须在 同一领域。但在“value1”和“value2”上有不等式过滤器) streammystream( {MyFilter筛选器,字符串类别}){ return\u service.collectionstream( 路径:

今天我注意到,每当我想查询数据库时,我都会遇到一个错误,这个错误对我来说毫无意义,查询就停止了。几周前效果还不错

无效的查询。所有这些过滤器都带有一个不等式(lessThan, lessThanOrEqual、greaterThan或greaterThanOrEqual)必须在 同一领域。但在“value1”和“value2”上有不等式过滤器)

streammystream(
{MyFilter筛选器,字符串类别}){
return\u service.collectionstream(
路径:APIPath.tools(cid,类别),
queryBuilder:filter!=null
?(查询)=>查询
.where('value1',大于:filter.minValue1)
.where('value1',小于:filter.maxValue1)
.where('value2',小于:filter.maxValue2)
.where('value2',大于:filter.minValue2)
:null,
生成器:(数据,文档ID)=>MyModel.fromMap(数据,文档ID),
排序:(lhs,rhs)=>lhs.value1.compareTo(rhs.value1));
}

我做错什么了吗?那个错误是什么意思?上次我为什么没得到它

使用firebase,您无法查询文档的多个字段。 因此,在您的情况下,您不能对“value1”和“value2”进行查询,您必须对“value1”进行查询,然后在intern中筛选您的查询以匹配“value2”

例如:

//your query code 
queryBuilder: filter != null
            ? (query) => query             
                .where('value2', isGreaterThan: filter.minValue2)
                .where('value2', isLessThan: filter.maxValue2)
                ...
            : null,
//your query code

myQuery = querySnapshot.documents.where((document) => document.data['value1'] > filter.minValue1).toList();

使用firebase,您无法对文档的多个字段进行查询。 因此,在您的情况下,您不能对“value1”和“value2”进行查询,您必须对“value1”进行查询,然后在intern中筛选您的查询以匹配“value2”

例如:

//your query code 
queryBuilder: filter != null
            ? (query) => query             
                .where('value2', isGreaterThan: filter.minValue2)
                .where('value2', isLessThan: filter.maxValue2)
                ...
            : null,
//your query code

myQuery = querySnapshot.documents.where((document) => document.data['value1'] > filter.minValue1).toList();

Firestore查询只能包含关系条件(
)Firestore查询只能包含关系条件(
哇……在我选择firestore作为我的应用程序之前,我希望我知道这一点。即使我不得不花上一周的时间编写它,是否有机会让它工作?我的意思是查询数据是我的应用程序的主要原因,因此如果没有它,我可以用不同的数据库重新开始,那么您的任何努力都无法改变此API的功能,所以您必须学习如何使用它。需要始终牢记的一点是,Firestore有一个独特的、严格的性能保证,它只允许is能够维护该保证的操作。这就是为什么它不允许在其他数据库上执行许多查询类型的原因:如前所述,Firestore的主要重点是它的unique性能保证。如果查询功能对您的用例来说比那些性能保证更重要,您可能需要考虑其他解决方案。您是否查询大量数据?如果是,您必须使用其他数据库或使用类似algolia()的解决方案。如果没有,您可以下载entires集合并在intern中执行筛选工作。我没有重新更新我的代码,因为如果您处理大量数据,我的解决方案不是一个好做法。我从未使用过Algolia,但Algolia不仅仅用于全文搜索,Algolia是一个提供复杂查询的工具。哇……我希望在选择fi之前知道这一点为我的应用程序还原。即使我不得不花上一周的时间编写它,是否有机会使它工作?我的意思是查询数据是我的应用程序的主要原因,因此如果没有它,我可以使用不同的数据库重新开始,然后您的任何努力都无法更改此API的功能,因此您必须学习如何使用它。这是一件需要始终保持的事情需要注意的是,Firestore有一个独特的、严格的性能保证,它只允许is能够维护该保证的操作。这就是为什么它不允许在其他数据库上执行许多查询类型的原因:如前所述,Firestore的主要重点是其独特的性能保证。如果查询功能更重要对于您的用例,除了性能保证之外,您可能还需要考虑其他解决方案。您是否查询大量数据?如果是,您必须使用其他数据库或使用类似algolia()的解决方案。如果没有,您可以下载entires集合并在intern中执行筛选工作。我没有重新更新代码,因为如果您处理大量数据,我的解决方案不是一个好的做法。我从未使用过Algolia,但Algolia不仅仅用于全文搜索,Algolia是一个提供复杂查询的工具。