Firestore, где EqualsTo от arraylist - PullRequest
0 голосов
/ 29 июня 2018

Я пытаюсь перечислить документы, которые соответствуют значению поля String из ArrayList.

Просто:

  • У меня есть ArrayList с тегами, хранящимися во время выполнения
  • и документы с полем тег

и я хочу запросить документы, которые соответствуют тегу одному из тегов, хранящихся в ArrayList. Возможно ли это официальным запросом или мне нужно загрузить все документы и отфильтровать их на стороне клиента? Спасибо за любые ответы.

Кроме того, это мой метод генерации запроса:

public static Query getQueryForFollowed(DocumentSnapshot snapshots) {
    if (snapshots == null || !snapshots.exists()) {
        return FirebaseFirestore.getInstance().collection("posts").whereEqualTo("null", "null"); // return query that will get nothing
    }
    ArrayList<String> f = processFollowedTags(snapshots);
    Query query = FirebaseFirestore.getInstance()
            .collection("posts")
            .whereEqualTo("tag", f.get(0));
    for (int i = 1; i < f.size(); i++) {
        query = query.whereEqualTo("tag", f.get(i));
    }
    return query;
}

Я выполнил отладку кода, и запрос содержал запрошенные условия, но запрос не нашел ни одного документа, соответствующего ему.

Ответы [ 3 ]

0 голосов
/ 29 июня 2018

После еще одного поиска в Google я обнаружил, что поле запроса для нескольких значений недоступно.

Согласно:

0 голосов
/ 01 ноября 2018

Ниже приведен фрагмент кода.

fun arrayContainsQueries() {
    // [START array_contains_filter]
    val citiesRef = db.collection("cities")
    citiesRef.whereArrayContains("regions", "west_coast")
    // [END array_contains_filter]

}

ref: git

0 голосов
/ 29 июня 2018

Попробуйте

Query query = FirebaseFirestore.getInstance()
            .collection("posts")
            .whereEqualTo("tag", f.get(0)).orderBy("tag", Query.Direction.ASCENDING);;       
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...