如何在Firebase Firestore查询中使用whereEqualTo()和orderBy()?

时间:2020-09-21 15:54:47

标签: android firebase google-cloud-firestore

我在Firestore中有以下收藏。所有文件都相似:

enter image description here

我正在尝试对其执行以下查询:

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.DESCENDINGOrderBy.Direction.DESCENDINGStructuredQuery.Direction.DESCENDING。如您所见,我正在使用Query.Direction.DESCENDING。其他两种类型会在IDE中产生错误。

我不明白到底出了什么问题。我的logcat中没有收到任何错误消息,因此安全规则没有问题。从logcat输出中可以看到,查询实际上在运行,它只返回一个空的queryDocumentSnapshots

1 个答案:

答案 0 :(得分:1)

过滤器的文档字段称为“已完成”,但是您正在使用“ isFulfilled”对其进行过滤。那根本行不通。您必须使用与实际字段相同的名称。

database
    .collection("Orders")
    .whereEqualTo("Donor", email)
    .whereEqualTo("fulfilled", false)
    .orderBy("timestamp", Query.Direction.DESCENDING).get()
相关问题