Firestore android 连续 whereArrayContains 查询不起作用
Firestore android consecutive whereArrayContains queries not working
我有一些包含两个数组的文档,一个用于搜索功能(关键字),另一个用于按服务过滤,使用单个 whereArrayContains 或 whereArrayContainsAny 效果很好。如果我同时使用它们来获取既具有搜索功能关键字又具有至少一项选定服务的文档,它会卡在加载状态,并且永远不会 returns 任何东西。
对于上下文,我将 jetpack compose 与 compose pager 一起用于显示文档的 lazyColumn。
这个作品:
FirebaseFirestore.getInstance().collection("Clubs")
.whereArrayContainsAny("services", sportsFilters)
.get()
.await()
这也有效:
FirebaseFirestore.getInstance().collection("Clubs")
.whereArrayContains("keywords", searchString.lowercase().trim())
.get()
.await()
这不起作用:
FirebaseFirestore.getInstance().collection("Clubs")
.whereArrayContains("keywords", searchString.lowercase().trim())
.whereArrayContainsAny("services", sportsFilters)
.get()
.await()
来自 query limitations 上的 Firestore 文档:
You can use at most one array-contains
clause per query. You can't combine array-contains
with array-contains-any
.
因此您尝试执行的查询无法在 Firestore API 上执行。解决方法是对数据库执行一个过滤条件,然后在您的应用程序代码中执行另一个过滤条件。
我有一些包含两个数组的文档,一个用于搜索功能(关键字),另一个用于按服务过滤,使用单个 whereArrayContains 或 whereArrayContainsAny 效果很好。如果我同时使用它们来获取既具有搜索功能关键字又具有至少一项选定服务的文档,它会卡在加载状态,并且永远不会 returns 任何东西。 对于上下文,我将 jetpack compose 与 compose pager 一起用于显示文档的 lazyColumn。
这个作品:
FirebaseFirestore.getInstance().collection("Clubs")
.whereArrayContainsAny("services", sportsFilters)
.get()
.await()
这也有效:
FirebaseFirestore.getInstance().collection("Clubs")
.whereArrayContains("keywords", searchString.lowercase().trim())
.get()
.await()
这不起作用:
FirebaseFirestore.getInstance().collection("Clubs")
.whereArrayContains("keywords", searchString.lowercase().trim())
.whereArrayContainsAny("services", sportsFilters)
.get()
.await()
来自 query limitations 上的 Firestore 文档:
You can use at most one
array-contains
clause per query. You can't combinearray-contains
witharray-contains-any
.
因此您尝试执行的查询无法在 Firestore API 上执行。解决方法是对数据库执行一个过滤条件,然后在您的应用程序代码中执行另一个过滤条件。