Я только что пришел из школы реляционных баз данных и работа с базами данных JSON - непростая задача для новых пользователей. У меня есть эта структура для хранения пользователей:Продвинутый запрос Firebase с фильтром в Swift
{
"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"
with
уровень 1**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 с фактической структурой
- Если это невозможно, как улучшить мою структуру базы данных для моего конкретного варианта использования (чтобы иметь возможность га ndle запрос выше лучшим образом)
Рекомендуемое чтение: [Моделирование данных NoSQL] (https://highlyscalable.wordpress.com/2012/03/01/nosql-data-modeling-techniques/) и [мой ответ здесь] (http: // stackoverflow. com/questions/26700924/query-based-on-multiple-where-clauses-in-firebase) –
Две вещи: пожалуйста, разместите свою структуру Firebase как текст, без изображений. Это облегчает копирование/вставку в ответ, а также делает его доступным для поиска. Консоль Firebase имеет функцию экспорта. Кроме того, сколько пользователей у вас будет онлайн в любой момент времени? – Jay
@Jay thx, я обновил свой вопрос с текстовой структурой, и я ожидаю, что, возможно, это первый шаг сотен или десятков. Но было бы здорово, если бы решение могло быть масштабируемым, любые предложения? – iOSGeek