# #swift #google-cloud-firestore
Вопрос:
Я выполняю базовый запрос к небольшой базе данных, которая структурирована следующим образом:
- карМейк:
- Кармодель:
- Цвет автомобиля:
Допустим, первые 2 поля содержат конкретную информацию:
- карМейк: «Форд»
- Кармодель: «Мустанг»
Но для третьего поля я могу запросить все значения определенного цвета: красный, синий и т.д. Вопрос, который у меня есть, заключается в том, как я могу запросить третье поле, используя:
- Цвет автомобиля: «Все цвета»
Если «Все цвета» не является определенным значением? Я использовал: .whereField(CAR_COLOR, isGreaterThanOrEqualTo или arrayContains или arrayContainsAny и т. Д.), И это не работает. Я не получаю никаких результатов. Есть какие-нибудь идеи? Спасибо!
Комментарии:
1. Если вы хотите, чтобы он возвращал все, независимо от того, какой цвет находится в этом поле, зачем
whereField
вообще использовать запрос?2. Поле carColor должно предоставить конечному пользователю возможность, если он хочет отфильтровать определенный цвет (красный, синий и т.д.) Или если он хочет видеть все, независимо от цвета, он может использовать «Все цвета».
3. Хорошо. Итак, если они выберут «все цвета», то я изо всех сил пытаюсь понять, почему вы
whereField
carColor
вообще использовали бы в этом случае.4. «Все цвета» не назначаются ни одному объекту carColor. Я использую поле Где, чтобы пользователь мог фильтровать по определенному цвету. Позвольте мне тогда спросить вас, можно ли обойти поле carColor, если в запросе я выбираю «Все цвета»? но если запрос имеет определенный цвет «Красный», не обходите и не запускайте его?
5. Проще всего, вы могли бы просто использовать
if { } else { }
для выполнения различных запросов. Но, если вы хотите использовать ту же цепочку запросов, я добавил ниже ответ, который позволил бы использовать условныйwhereField
запрос. Вы хотели бы пройтиfalse
useCondition
в случае, если вы не хотите выполнять запрос.
Ответ №1:
Основываясь на обсуждении комментариев, похоже, что вы хотите иметь возможность включать whereField
в свою цепочку запросов, но фактически не выполнять ее, если определенные условия являются истинными/ложными.
Я предлагаю добавить расширение в Query
:
extension Query {
func whereField(useCondition: Bool, _ field: String, arrayContains: String) -> Query {
if useCondition {
return self.whereField(field, arrayContains: arrayContains)
} else {
return self
}
}
}
Тогда вы могли бы сделать что-то вроде этого:
db.collection("car").whereField(useCondition: !allColors, "carColor", arrayContains: searchedColor)
Обратите внимание, что вам, возможно, придется настроить это в соответствии с тем разнообразием whereField
, которое вам нужно.