Java 在firestore中使用多个字段的查询
我有一个firestore收藏,其中包括书籍的名称 我有一个带有搜索字段的活动,我让用户通过查询收藏来查找一本书 以下查询对我很有用:Java 在firestore中使用多个字段的查询,java,android,firebase,google-cloud-firestore,Java,Android,Firebase,Google Cloud Firestore,我有一个firestore收藏,其中包括书籍的名称 我有一个带有搜索字段的活动,我让用户通过查询收藏来查找一本书 以下查询对我很有用: db.collection( "Books" ) .whereGreaterThanOrEqualTo( "BookTitle", s.toString() ).whereLessThanOrEqualTo( "BookTitle", s.toString() + "\uF7F
db.collection( "Books" )
.whereGreaterThanOrEqualTo( "BookTitle", s.toString() ).whereLessThanOrEqualTo( "BookTitle", s.toString() + "\uF7FF" ).limit( 5 ).get()
.addOnCompleteListener( task -> {
if (task.isSuccessful()) {
for (QueryDocumentSnapshot document : task.getResult()) {
DOING SOMETHING
}
}
} );
但是,我现在将另一个字段添加到我的收藏中的一些文档中,称为UserID
,并查询所有没有此字段的书籍,如下所示:
db.collection( "Books" )
.whereGreaterThanOrEqualTo( "BookTitle", s.toString() ).whereLessThanOrEqualTo( "BookTitle", s.toString() + "\uF7FF" ).whereNotEqualTo( "UserID", null ).limit( 5 ).get()
.addOnCompleteListener( task -> {
if (task.isSuccessful()) {
for (QueryDocumentSnapshot document : task.getResult()) {
DO SOMETHING
}
}
} );
我的错误是:
All where filters with an inequality (notEqualTo, notIn, lessThan, lessThanOrEqualTo, greaterThan, or greaterThanOrEqualTo) must be on the same field. But you have filters on 'BookTitle' and 'UserID'
有没有其他方法可以达到这个效果
我想我可以获取文档,然后检查其中的UserID值是多少,但我可能会以这种方式读取不需要的文档
感谢您的参考,请参阅Firebase文档上的示例。@Dondi OP已经意识到这些限制,并正在寻找解决方法。在每个图书文档中出现“UserID”的含义是什么?一本书是否属于一个用户?为什么要存储空值?@AlexMamo,我想在“Books”集合中包含两种类型的文档。一种是属于用户的书籍,因此它们会出现在搜索和其他类型中,UserID为null,用于算法的其他部分,不会显示在搜索中,因为没有用户有这本书。那么为什么不使用两个单独的集合呢?