我正在尝试查询具有特定类型和用户评级的文档。
在文档中,genres 是一个数组 [],userRating 是 5 中的数字。
这是我的查询:
q = query(
ColRef,
where("genres", "array-contains", "Comedy"),
where("userRating", ">=", 3)
);
我在运行时收到此错误
FirebaseError: [code=failed-precondition]
火力基地文档说
您只能对单个字段执行范围 (<、<=、>、>=) 或不等于 (!=) 比较,并且最多可以在复合查询中包含一个数组包含或数组包含任意子句:
我使用一个数组包含和一个不等于,或者我不明白它们的意思是数组包含也被视为范围过滤器?
如前所述,您需要一个复合索引来支持此查询:
[genres - Arrays, userRating - Ascending]
默认情况下,查询将根据userRating
的值按升序对结果进行排序。但是您的索引模式Descending
了userRating
,因此第一个索引不起作用。
如果您指定了按降序对结果进行排序orderBy('userRating', 'desc')
则该索引将支持您的查询。
您可以在文档中阅读有关此内容的更多信息。