Firestore, где ArrayContains не работает, когда в Android более 1 значения в массиве - PullRequest
1 голос
/ 06 ноября 2019

У меня есть документ Firestore «users» с полем массива «languages» и «country». Каждый пользователь использует несколько языков, поэтому для одного пользователя это

user1,

   languages: english, spanish, italian
   country: "UK"
user2,
   languages: english
   country: "UK"

enter image description here enter image description here

Мой запрос выглядит следующим образом:

   query = db.collection("users");
   query = query.whereEqualTo("country", "UK");
   query = query.whereArrayContains("languages", "English");
query.addSnapshotListener(new EventListener<QuerySnapshot>() {
        @Override
        public void onEvent(@NonNull QuerySnapshot queryDocumentSnapshots, @Nullable FirebaseFirestoreException e) {
            if (e != null) {
                return;
            }
            if (queryDocumentSnapshots != null) {
                List<DocumentSnapshot> snapshotList = queryDocumentSnapshots.getDocuments();

                for (DocumentSnapshot document : snapshotList) {
 String country= document.getString("country");
     Log.wtf(TAG, country);
    }
 } else {
                Log.d(TAG, "Error getting documents: ");
            }
        }
    });

В результате возвращаются только данные для "user2", поскольку в языках массива у него только одно поле. Althoug "user1" также имеет английский в качестве значения языка, если данные этого пользователя не возвращаются.

Что я делаю не так?

enter image description here enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...