Consulta avançada do Firebase com filtro no Swift
Acabei de chegar da escola de banco de dados relacional e lidar com bancos de dados JSON não é uma tarefa fácil para os recém-chegados. Eu tenho essa estrutura para armazenar usuários:
{
"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
} ]
}
}
}
Eu ofereço uma tela de pesquisa no meu aplicativo em que os usuários podem procurar outros usuários e combinar todos esses parâmetros de filtro:
Exemplo:
Pegue10
Comercialstarting from index 0
quem é:
male
e de"US"
e speaks "da_DK"
comlevelID 2
ou e "fr_FR"
comany level
e aprende "de_DE"with
nível 1**and/or**
aprende "ar_AR"with
nível 4`e comage range between 18 and 24
e ordenar porisOnline
e last login date
.Essa é uma tarefa fácil com o SQL, ao supor que exista uma tabela chamada 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
Minhas perguntas:
Como criar a consulta acima com o Firebase com a estrutura realSe não for possível como melhorar minha estrutura de banco de dados para meu caso de uso específico (para poder lidar com a consulta acima de uma maneira melhor)