我在Firestore中有以下收藏。所有文件都相似:
我正在尝试对其执行以下查询:
orders = new ArrayList<>();
Log.d("cs50", "email = " + email);
database.collection("Orders").whereEqualTo("Donor", email).whereEqualTo("isFulfilled", false).orderBy("timestamp", Query.Direction.DESCENDING).get()
.addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
@Override
public void onSuccess(QuerySnapshot queryDocumentSnapshots) {
Log.d("cs50", "snapshots.size() = " + queryDocumentSnapshots.size());
for (QueryDocumentSnapshot documentSnapshot : queryDocumentSnapshots) {
orders.add(documentSnapshot.getId());
Log.d("cs50", "onSuccess() orders.size() = " + orders.size());
}
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.e("cs50", "Error getting orders", e);
}
});
notifyDataSetChanged();
我在logcat中得到以下输出:
2020-09-21 20:41:54.736 9560-9560/com.example.treeapp D/cs50: email = donor40@gmail.com
2020-09-21 20:41:55.876 9560-9560/com.example.treeapp D/cs50: snapshots.size() = 0
查询不会返回任何文档快照,如您从logcat中看到的那样。
我的猜测是我可能在Direction.DESCENDING
中使用了错误的orderBy
类型。我很可能错了。 IDE为Direction.DESCENDING
提供了三个选项:Query.Direction.DESCENDING
,OrderBy.Direction.DESCENDING
和StructuredQuery.Direction.DESCENDING
。如您所见,我正在使用Query.Direction.DESCENDING
。其他两种类型会在IDE中产生错误。
我不明白到底出了什么问题。我的logcat中没有收到任何错误消息,因此安全规则没有问题。从logcat输出中可以看到,查询实际上在运行,它只返回一个空的queryDocumentSnapshots
。
答案 0 :(得分:1)
过滤器的文档字段称为“已完成”,但是您正在使用“ isFulfilled”对其进行过滤。那根本行不通。您必须使用与实际字段相同的名称。
database
.collection("Orders")
.whereEqualTo("Donor", email)
.whereEqualTo("fulfilled", false)
.orderBy("timestamp", Query.Direction.DESCENDING).get()