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 é:

malee de"US"e speaks "da_DK" comlevelID 2 ou e "fr_FR" comany levele aprende "de_DE"withnível 1**and/or**aprende "ar_AR"withnível 4`e comage range between 18 and 24e 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)

questionAnswers(1)

yourAnswerToTheQuestion