Как реализовать "НЕ В" в firebase?
У меня есть набор данных объектов, например, автомобилей. Я хочу создать систему, в которой пользователям представлен объект, и я могу решать, нравится ли им автомобиль. Но я хочу показать им каждую машину только один раз.
- allCars
- car1
- car2
...
- car348237
- carsLiked
- user1
- carsLiked
- car123
- car234
- carsNotLiked
- car321
- user2
- carsLiked
- carsNotLiked
Для какого-то пользователя, например user1, как я могу сделать выбор из всех автомобилей, БЕЗ автомобилей, которые пользователь уже видел? В SQL я бы сделал что-то вроде "ГДЕ НЕ УКАЗАНО (car123, car234, car321) "
Любая идея, как я могу сделать это в Firebase (без фильтрации на стороне клиента, я знаю, как это сделать)...? Любая структура возможна, используя какой-то индекс. Некоторое время я боролся, но не нашел решения.
1 ответ
Денормализация является ключом.
Я бы скопировал набор всех автомобилей в объекте каждого пользователя, а затем удалил объект автомобиля, уже отображенный для пользователя.
cars:{
CAR_AUDO_ID: {
//car object
}
users:{
user1:{
car_selection:{
CAR_AUTO_ID: true //reference to above
...
},
cars_liked:{
},
cars_disliked:{
}
}
Исходя из SQL, это может звучать как большая репликация, но это путь с Firebase.
в случае, если у вас есть что-то вроде 10K+ автомобилей, конечно, вышеупомянутое было бы излишним. Если бы пользователям представили случайную машину, я бы сфокусировался на генераторе случайных чисел, где я буду хранить только уже выбранные числа. В этом случае лучше всего использовать упорядоченный список приоритетов, а ваш ключ будет что-то вроде счетчика приращений.