Расширенный Firebase Query с фильтром в Swift
Я только что пришел из школы реляционных баз данных, и работа с базами данных JSON - непростая задача для новичков. У меня есть эта структура для хранения пользователей:
{
"users" : {
"0CcKvNkOm5fVqL" : {
"birthday" : 564688000,
"country" : "US",
"email" : "[email protected]",
"firstName" : "John",
"gender" : "male",
"isOnline" : true,
"lastLoginDate" : 1468166460486,
"lastName" : "Paul",
"learningLanguages" : [ {
"language" : "fr_FR",
"levelID" : 2
} ],
"profileImage" : "https://firebasestorage.googleapis.com/image.jpg",
"providerID" : "Firebase",
"registrationDate" : 1468168460486,
"speakingLanguages" : [ {
"language" : "es_ES",
"levelID" : 7
} ]
}
}
}
Я предлагаю экран поиска в моем приложении, где пользователи могут искать других пользователей, и они могут объединить все эти параметры фильтра:
Пример:
Получить10
пользователиstarting from index 0
кто:
male
а также от"US"
а также speaks "da_DK"
сlevelID 2
и / или "fr_FR"
сany level
а также учится "de_DE"with
1-й уровень**and/or**
учится "ar_AR"with
уровень 4`а также сage range between 18 and 24
а также Сортировать поisOnline
а также last login date
.Это простая задача с SQL, если предположить, что есть таблица с именем users_languages:
SELECT ...
FROM users AS u
JOIN users_languages AS l
ON u.id = l.id
WHERE u.gender = "male"
AND u.age BETWEEN 18 AND 24 // need claculation but let's keep it simple
AND u.country = "US"
AND ((l.language = "de_DE" AND l.mode = "learning" AND l.level = 1) OR (l.language = "ar_AR" AND l.mode = "learning" AND l.level = 4))
....
ORDER BY isOnline, lastLoginDate DESC
LIMIT 0,10
Мои вопросы:
Как я могу построить запрос выше с Firebase с фактической структуройЕсли не представляется возможным, как улучшить структуру моей базы данных для моего конкретного случая использования (чтобы иметь возможность лучше обрабатывать вышеуказанный запрос)