Как реализовать "НЕ В" в 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+ автомобилей, конечно, вышеупомянутое было бы излишним. Если бы пользователям представили случайную машину, я бы сфокусировался на генераторе случайных чисел, где я буду хранить только уже выбранные числа. В этом случае лучше всего использовать упорядоченный список приоритетов, а ваш ключ будет что-то вроде счетчика приращений.

Другие вопросы по тегам