Firestore запрашивает у Swift 4 диапазон

Я хочу задать вопрос, связанный с быстрыми запросами к хранилищу огня. У меня есть структура пожарного склада, как показано ниже:

Firestore запрашивает у Swift 4 диапазон

в настоящее время я разрабатываю поисковую систему, в которой пользователь может фильтровать людей min и max по team. ниже приведены запросы для .collection("team")

Firestore.firestore().collection("team")
.whereField("min", isGreaterThanOrEqualTo : filterMin)
.whereField("max", isLessThanOrEqualTo : filterMax)

Ожидается: если пользователь поместит filterMin = 0 и filterMax = 600, будут отображаться данные для team1 и team2, если пользователь поместит filterMin = 3 и filterMax = 500, будут отображаться только данные для team2.

Но проблема в том, что если я использую приведенный выше код, я получаю сообщение об ошибке, как показано ниже.

'Invalid Query. All where filters with an inequality (lessThan, lessThanOrEqual, greaterThan, or greaterThanOrEqual) must be on the same field. But you have inequality filters on 'min' and 'max''

Я уже читал документацию, но, похоже, мне это мало помогает. Я все еще новичок в быстрой разработке и firebase. Спасибо за помощь.

По сути, Cloud Firestore в настоящее время не позволяет выполнять такой уровень фильтрации. Обходной путь может заключаться в выполнении первого запроса .whereField, а затем, когда у вас есть документы, отфильтруйте свой массив для второго запроса.

rbaldwin 01.05.2018 20:57
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
4
1
3 211
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

У вас не может быть оператора неравенства для нескольких полей, поле вашего существа может быть минимальным или максимальным. Firestore поддерживает только один оператор inEquality (<,>, <=,> =), а затем столько операторов eqaulity (==), сколько вы хотите.

Вы можете узнать больше об этом в разделе «Составные запросы» здесь.

Ответ принят как подходящий

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

    Firestore.firestore().collection("team")
    .whereField("min", isGreaterThanOrEqualTo : filterMin)
        .getDocuments { (snapshot, error) in
            if let snapshot = snapshot {
                for document in snapshot.documents {
                    let data = document.data()

                    //parse your data into an array of teams
                }
            }

            let filteredTeams = teams.filter { $0.max < filterMax }    
    }

привет, спасибо за помощь, я разобрал свои данные в массив. теперь, что мне делать с постоянным filteredTeams

madhatter989 01.05.2018 21:24
filteredTeams должен содержать массив команд, для которых вы изначально пытались запросить. Те, у кого min> filterMin & max <filterMax.
rbaldwin 01.05.2018 21:26

Ограничения Firestore на запросы очень раздражают. Это делает Google Firestore непригодным для использования в большом проекте.

Andrey Gordeev 04.06.2018 07:14

Другие вопросы по теме