Consulta avanzada de Firebase con filtro en Swift

Acabo de llegar de la escuela de bases de datos relacionales y tratar con bases de datos JSON no es una tarea fácil para los recién llegados. Tengo esta estructura para almacenar usuarios:

{
  "users" : {
    "0CcKvNkOm5fVqL" : {
      "birthday" : 564688000,
      "country" : "US",
      "email" : "email@live.com",
      "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
      } ]
    }
  }
}

Ofrezco una pantalla de búsqueda en mi aplicación donde los usuarios pueden buscar a otros usuarios y pueden combinar todos estos parámetros de filtro:

Ejemplo:

Obtener10 los usuariosstarting from index 0 quien es:

maley de"US"y speaks "da_DK" conlevelID 2 o y "fr_FR" conany levely aprende "de_DE"withnivel 1**and/or**aprende "ar_AR"withnivel 4`y conage range between 18 and 24y ordenar porisOnline y last login date.

Esta es una tarea fácil con SQL, cuando se supone que hay una tabla llamada 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

Mis preguntas:

¿Cómo puedo construir la consulta anterior con Firebase con la estructura real?Si no es posible cómo mejorar la estructura de mi base de datos para mi caso de uso específico (para poder manejar la consulta anterior de una mejor manera)