Advanced Firebase Query mit Filter in Swift
Ich komme gerade aus der relationalen Datenbankschule und der Umgang mit JSON-Datenbanken ist für Neueinsteiger keine leichte Aufgabe. Ich habe diese Struktur, um Benutzer zu speichern:
{
"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
} ]
}
}
}
Ich biete in meiner App einen Suchbildschirm an, in dem Benutzer nach anderen Benutzern suchen und alle diese Filterparameter kombinieren können:
Beispiel
Bekommen10
usersstarting from index 0
wer sind:
male
un von"US"
un speaks "da_DK"
mitlevelID 2
oder un "fr_FR"
mitany level
un lernt "de_DE"with
Level **and/or**
learns "ar_AR"with
level 4`un mitage range between 18 and 24
un Sortieren nachisOnline
un last login date
.Dies ist eine einfache Aufgabe mit SQL, wenn man annimmt, dass es eine Tabelle mit dem Namen users_languages gibt:
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
Meine Fragen
Wie kann ich die obige Abfrage mit Firebase mit der tatsächlichen Struktur erstellenWenn es nicht möglich ist, meine Datenbankstruktur für meinen speziellen Anwendungsfall zu verbessern (um die obige Abfrage besser verarbeiten zu können)