1

車などのオブジェクトのデータセットがあります。ユーザーに物を見せて、車が好きかどうかを判断できるシステムを作りたいです。しかし、私は彼らに各車を一度だけ見せたい.

- allCars
  - car1
  - car2
  ...
  - car348237

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

user1 などのユーザーが与えられた場合、allCars から、そのユーザーが既に見た車を除外するにはどうすればよいでしょうか? 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 を使用する方法です。

10,000 台以上の車を所有している場合、上記はもちろんやり過ぎです。ユーザーにランダムな車が提示された場合、既に選択した番号のみを保存する乱数ジェネレーターに焦点を当てます。その場合、優先順位付きリストを使用するのが最善であり、キーはインクリメントカウンターのようなものになります。

于 2014-08-13T09:10:09.230 に答える