1

基本的に、私のアプリには、賛成票/反対票を投じることができる場所に基づく投稿があります。指定された地域にあり、過去 24 時間に作成された上位 15 件の賛成票を返すクエリを作成する必要があります。SQLのバックグラウンドから来て、JSON形式とfirebaseの組み込みの順序によるクエリとフィルタリングオプションを使用すると、これを行うのが不必要に難しいことがわかりました。多くのクライアント側のフィルタリングが必要になる可能性が高いことを認識しているため、クライアント側のフィルタリングを最小限に抑えるには、JSON 構造とクエリ形式をどのようにするかを尋ねています。これまでのところ、これは私のJSON形式がどのように見えるかです:

  "posts" : {

    "-KPFIsDbf3WUljWvBwi-" : {

      "latitude" : 33.64114800203589,
      "longitude" : -116.4236003651668,
      "time" : 1.47129994542173E12,
      "uid" : "wjXpBBJMBVPvRVG48fFkerAw6TD3",
      "upvotes" : 0
},

Geofire を使用してみましたが、残念ながら地域ごとにクエリを実行する機能しかないようです。また、地域と投稿された時間 (とりわけ) でクエリを実行したいため、Geofire を使用するとうまくスケーリングできません。

4

1 に答える 1

0

GeoFire と Firebase クエリの組み合わせを使用して、同様のセットアップで行うことは次のとおりです。

ステップ 1 (保存): 投稿を保存するときは、最初にランダム ID を使用してデータベースに保存します。次に、その ID を取得し、GeoFire ロケーションを作成して、投稿 ID をロケーション キーとして設定します。

ステップ 2 (クエリ): これは 2 ステップのクエリになります。

ステップ 2a: 指定された地域内のすべての GeoFire ロケーションを取得します。これで、スナップショットからすべての場所のキーを取得し、それぞれに 1 つのデータ イベント ハンドラーをアタッチできます。

ステップ 2b: 投稿オブジェクトの並べ替えられた配列を賛成票の数で維持します。単一イベント リスナーのスナップショットで、最初にタイムスタンプをチェックして、過去 24 時間以内かどうかを確認します。次に、配列のカウントが 15 未満の場合は、(適切な解析方法を使用して) 並べ替えられた位置に投稿を追加します。すでに 15 個ある場合は、配列内の最小の最小要素にさらに賛成票があるかどうかを確認する必要があります。そうでない場合は、配列内で置換する場所を見つける必要があります。Geofire からのすべてのスナップショットの解析が完了すると、過去 24 時間の投稿の配列が賛成票でソートされます。

于 2016-08-17T23:03:51.060 に答える