Google cloud firestore Firestore:我们不能在使用where筛选的字段上使用orderBy吗?

Google cloud firestore Firestore:我们不能在使用where筛选的字段上使用orderBy吗?,google-cloud-firestore,Google Cloud Firestore,当我尝试使用过滤的字段,其中(字段,数组)时,我遇到了这个错误: FirebaseFirestoreException:无效参数:Order by子句不能包含具有相等筛选器的字段 但没有平等的标志;等式之间有一个OR,比如field=“xx”或field=“yy”或field=“zz” 这使得按字段订购是完全合理的 是否真的不可能在同一字段上使用orderBy with where???,其中(也称为array contains)实际上是一个逻辑OR,由多个检查是否相等的值组成。正如您从(我的)

当我尝试使用
过滤的
字段,其中(字段,数组)
时,我遇到了这个错误:

FirebaseFirestoreException:无效参数:Order by子句不能包含具有相等筛选器的字段

但没有平等的标志;等式之间有一个OR,比如field=“xx”或field=“yy”或field=“zz”

这使得按字段订购是完全合理的

是否真的不可能在同一字段上使用orderBy with where???

,其中
(也称为array contains)实际上是一个逻辑OR,由多个检查是否相等的值组成。正如您从(我的)重点中看到的:

使用
运算符中的
将同一字段上最多10个相等
==
)子句与逻辑OR组合。in查询返回给定字段与任何比较值匹配的文档

因此,其中应被视为相等过滤器。关于这一点,错误消息可能更清楚,但我怀疑它是Firestore中没有可用的
中的
操作符时遗留下来的

要回答这个问题,不,这是不可能的。

其中
(也称为array contains)实际上是一个逻辑OR,由多个检查是否相等的值组成。正如您从(我的)重点中看到的:

使用
运算符中的
将同一字段上最多10个相等
==
)子句与逻辑OR组合。in查询返回给定字段与任何比较值匹配的文档

因此,其中应被视为相等过滤器。关于这一点,错误消息可能更清楚,但我怀疑它是Firestore中没有可用的
中的
操作符时遗留下来的


回答这个问题,不,这是不可能的。

我认为这是Firestore中的一个bug。我知道它是否等于单个值,但不等于数组。我已经通过在适配器中进行排序解决了这个问题。我认为这根本不是一个bug——文档非常清楚。但无论如何,你都可以自由地提交错误报告。我同意这是一个bug,或者至少是一个不需要的特性。例如,假设您有一个具有
color
属性的水果列表。在UI中,您有一个过滤器,允许您仅显示一种或多种颜色的水果——您还有一个排序,允许您按颜色对水果进行排序。假设您只想看到蓝色和红色的水果,并按颜色对它们进行排序。结果是蓝色和红色的水果,按顺序排列。在当前的限制下,您现在无法做到这一点。因此,在我看来,这并不是一个奇怪的用例,它似乎是他们在
中添加
之前的遗留物。我认为这是Firestore中的一个bug。我知道它是否等于单个值,但不等于数组。我已经通过在适配器中进行排序解决了这个问题。我认为这根本不是一个bug——文档非常清楚。但无论如何,你都可以自由地提交错误报告。我同意这是一个bug,或者至少是一个不需要的特性。例如,假设您有一个具有
color
属性的水果列表。在UI中,您有一个过滤器,允许您仅显示一种或多种颜色的水果——您还有一个排序,允许您按颜色对水果进行排序。假设您只想看到蓝色和红色的水果,并按颜色对它们进行排序。结果是蓝色和红色的水果,按顺序排列。在当前的限制下,您现在无法做到这一点。因此,在我看来,这并不是一个奇怪的用例,它似乎是他们在
中添加
之前的遗物。