我想使用由whereLessThan()
和whereGreaterThan()
方法组成的查询从Firestore检索数据。但是,当我使用以下查询时,它将返回空快照:
Query query = firestore.collection("Users").whereLessThan("id",id).whereGreaterThan("id", id).orderBy("id");
但是当我仅使用1个子句时,它会成功检索数据:
Query query = firestore.collection("Users").whereLessThan("id",id); //Working Fine
我还尝试通过将snapshotListener附加到查询中来
:query.addSnapshotListener(new EventListener<QuerySnapshot>() {
@Override
public void onEvent( QuerySnapshot queryDocumentSnapshots, FirebaseFirestoreException e)
{
if(queryDocumentSnapshots.isEmpty()){
Toast.makeText(RetrieveUserActivity.this, "No data found", Toast.LENGTH_SHORT).show();
}
}
});
这显示未找到数据的吐司。
这是我的数据库结构:
答案 0 :(得分:0)
如果我理解正确,则您正在尝试从id
集合中排除具有特定Users
的单个用户。如果是这样,则应该更改代码的逻辑,因为不幸的是,您无法以这种方式实现此目的。这就是为什么您获得空快照的原因。如果您将一直使用以下代码行:
Query query = firestore.collection("Users")
.whereLessThanOrEqualTo("id",id)
.whereGreaterThanOrEqualTo("id", id)
.orderBy("id");
snapshot
对象将仅包含一个结果,即具有该特定id
的单个用户。上面的代码行也可以像这样更简单地编写:
Query query = firestore.collection("Users")
.whereEqualTo("id",id)
.orderBy("id");
我为您提供了这些示例,以更好地了解此方法的工作方式。要解决您的问题,请根据有关Query limitations的官方文档:
Cloud Firestore 不支持以下类型的查询:
带有!= 子句的查询。在这种情况下,您应该将查询分为大于查询和小于查询。例如, 尽管不支持查询子句where(“ age”,“!=”,“ 30”), 您可以通过组合两个查询来获得相同的结果集,其中一个 子句where(“ age”,“ <”,“ 30”)和一个带子句的子句 where(“ age”,“>”,30)。
换句话说,Firestore中没有!=
(不等于)运算符。您唯一的选择是将查询分为greater-than
和less-than
查询,然后它将很好地工作