Luk*_*son 3 indexing android firebase google-cloud-firestore
我正在使用具有以下结构的 firebase cloud firestore datadabse 构建应用程序:
我正在查询用户的书籍,其中字段“StartDate”大于 0 且“EndDate”等于 0,然后该查询应按标题排序。
CollectionReference booksCollection = mFirebaseDatabase.collection("users").document(user.getUid()).collection("books");
Query databaseQuery = booksCollection.whereGreaterThan("StartDate", 0).whereEqualTo("EndDate", 0).orderBy("Title");
databaseQuery.get()
Run Code Online (Sandbox Code Playgroud)
为此,我读到您需要使用索引(尽管我没有在错误消息中获得索引的链接,因为它表明我应该这样做)。我的索引如下所示:
但我收到错误消息:
java.lang.IllegalArgumentException:查询无效。您在字段 'StartDate' 上有一个不等式过滤器(whereLessThan()、whereGreaterThan() 等),因此您还必须将 'StartDate' 作为您的第一个 orderBy() 字段,但您的第一个 orderBy() 目前在该字段上'标题' 代替。
Firestore 查询只能对单个字段进行排序或过滤范围。您正在尝试过滤StartDate然后订购Title,这是不可能的。
有关查询的Firestore 文档包含以下类似的不允许查询示例:
无效:不同字段上的范围过滤器和第一个 orderBy
Run Code Online (Sandbox Code Playgroud)citiesRef.whereGreaterThan("population", 100000).orderBy("country");
Firestore 只允许在可以满足其性能保证的情况下进行查询,以及对(当前)不可能的多个字段进行排序/范围过滤。请参阅 Todd关于 Firestore 查询的视频,以了解有关其工作原理的更多信息。
典型的解决方法是让 Firestore 处理过滤器(StartDate在您的情况下打开,然后在 Android 应用程序中重新排序结果。
| 归档时间: |
|
| 查看次数: |
4630 次 |
| 最近记录: |