Я хочу задать вопрос, связанный с быстрыми запросами к хранилищу огня. У меня есть структура пожарного склада, как показано ниже:
в настоящее время я разрабатываю поисковую систему, в которой пользователь может фильтровать людей 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. Спасибо за помощь.
У вас не может быть оператора неравенства для нескольких полей, поле вашего существа может быть минимальным или максимальным. 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
filteredTeams
должен содержать массив команд, для которых вы изначально пытались запросить. Те, у кого min> filterMin & max <filterMax.
Ограничения Firestore на запросы очень раздражают. Это делает Google Firestore непригодным для использования в большом проекте.
По сути,
Cloud Firestore
в настоящее время не позволяет выполнять такой уровень фильтрации. Обходной путь может заключаться в выполнении первого запроса.whereField
, а затем, когда у вас есть документы, отфильтруйте свой массив для второго запроса.