1

我有一个对象数据集,例如汽车。我想制作一个系统,向用户展示一个对象,并且可以决定他们是否喜欢这辆车。但是,我只想向他们展示每辆车一次。

- allCars
  - car1
  - car2
  ...
  - car348237

- carsLiked
  - user1
    - carsLiked
      - car123
      - car234
    - carsNotLiked
      - car321
  - user2
    - carsLiked
    - carsNotLiked

给定一些用户,例如 user1,我如何从用户已经看过的 allCars、WHITOUT 汽车中进行选择?在 SQL 中,我会执行类似“WHERE carId NOT IN (car123, car234, car321)”的操作

知道如何在 firebase 中执行此操作(无需在客户端进行过滤,我知道该怎么做)...?任何可能的结构,使用某种索引。?我挣扎了一段时间,但没有找到解决办法。

4

1 回答 1

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+ 的汽车,那么上述内容当然是矫枉过正。如果向用户展示一辆随机汽车,我将专注于随机数生成器,我将只存储已经选择的数字。在这种情况下,最好的方法是使用优先级排序列表,而您的键将类似于增量计数器。

于 2014-08-13T09:10:09.230 回答