【问题标题】:How to use whereEqualTo() and orderBy() in a Firebase Firestore query?如何在 Firebase Firestore 查询中使用 whereEqualTo() 和 orderBy()?
【发布时间】:2020-09-21 15:54:47
【问题描述】:

我在 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 中看到。

我的猜测是我可能在orderBy 中使用了错误类型的Direction.DESCENDING。很可能我错了。 IDE 为Direction.DESCENDING 提供了三个选项:Query.Direction.DESCENDINGOrderBy.Direction.DESCENDINGStructuredQuery.Direction.DESCENDING。如您所见,我使用的是Query.Direction.DESCENDING。其他两种类型在 IDE 中出现错误。

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

【问题讨论】:

    标签: android firebase google-cloud-firestore


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢。我应该在所有字段上都使用@PropertyName
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-22
    • 2021-10-24
    • 1970-01-01
    相关资源
    最近更新 更多