#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
все поля.