Расширенный 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"with1-й уровень**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 с фактической структуройЕсли не представляется возможным, как улучшить структуру моей базы данных для моего конкретного случая использования (чтобы иметь возможность лучше обрабатывать вышеуказанный запрос)

Ответы на вопрос(1)

Ваш ответ на вопрос