Как использовать wherequalto() и OrderBy() в запросе Firebase Firestore?

#android #firebase #google-cloud-firestore

#Android #firebase #google-облако-firestore

Вопрос:

У меня есть следующая коллекция в 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 .

Ответ №1:

Поле документа для фильтра называется «выполнено», но вы используете «isFulfilled» для его фильтрации. Это вообще не сработает. Вы должны использовать то же имя фактического поля.

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

Комментарии:

1. Спасибо. Я должен был использовать @PropertyName все поля.