Как условно добавить еще один фильтр в запрос в Firebase Firestore, используя swift? - PullRequest
0 голосов
/ 01 сентября 2018

Я работаю над проектом, использующим Google Firebase Firestore. Я хочу применить фильтр в моем поиске пользователей. Представьте себе поиск только активных пользователей с флажком, который могут выбрать пользователи.

let db = Firestore.firestore()
let reference = db.collection("users").limit(to: 20)
//FILTER
if showOnlyActiveUsersBtn.isSelected {
    reference.whereField("active", isEqualTo: true)
}
reference.getDocuments(completion: {(querySnapshot, error) in
    .....
})

Я ожидал, что это вернет результат только с пользователями, у которых есть поле "active: true", однако он вернул тот же список, что и запрос без фильтра ... если я напишу как:

let db = Firestore.firestore()
let reference = db.collection("users").limit(to: 20).whereField("active", isEqualTo: true)
reference.getDocuments(completion: {(querySnapshot, error) in
    .....
})

Возвращает результат, который я ожидал первым. Я понятия не имею, почему мой фильтр не работает. Как добавить логическое условие «И» удобным для пользователя способом?

1 Ответ

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

Объекты Firestore Query являются неизменяемыми, что означает, что они никогда не могут быть изменены после их создания. В своем коде вы не помните новый запрос, который вы создали с помощью whereField. Вместо этого вам нужно построить новый объект Query поверх существующего запроса и запомнить новый:

let db = Firestore.firestore()
var reference = db.collection("users").limit(to: 20)
if showOnlyActiveUsersBtn.isSelected {
    // build a new query using the old query, reassign to reference
    reference = reference.whereField("active", isEqualTo: true)
}
reference.getDocuments(completion: {(querySnapshot, error) in
    .....
})

Если вам не нравится использовать var вместо let, я уверен, что вы сможете найти способ переделать этот образец. В любом случае вам нужно будет запомнить новый запрос, возвращаемый whereField, и использовать его для вызова getDocuments.

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