2017-07-02 3 views
0

私はある種の個人用の語彙であるアプリケーションを作成しています。データベースの形式は次のとおりです。Firebaseデータベースのページ付け方法#AskFirebase

は今、私は辞書順を保存ページネーション、ユーザーの言葉の部分検索が、を実装する必要があります。ホモグラフの処理は将来不可能になるため(キーが一致するため)、単語をキー(/user/{uid}/words/{word})にすることは適切ではありません。私は、wordという追加のプロパティを各ユーザーに保存することに決めました。その結果、私はdb.getReference().child("users").child(uid).child("words").orderByChild("word")と呼ぶことができます。

これは、ユーザーのすべての単語を取得します。これで、このクエリにページを設定する必要があります。最初に20語をダウンロードし、次に20語などをダウンロードするが、辞書編集順は保存する。

{ 
    "users" : { 
    "yXYSqB016JMr1FIc85pvMbvqDDt2" : { 
     "words" : { 
     "5v1a1PaDKnTvvOH19kaFTa1iyOx2" : { 
      "index" : 1, 
      "word" : "apple" 
     }, 
     "kXHakBKxk9TrAlWL1vTOCe0akk80" : { 
      "index" : 2, 
      "word" : "house" 
     }, 
     "xSKSqB312JMrsFig15pvMbvqAAt0" : { ... } 
     } 
    }, 
    "zCAtMpl9uxSjG9dJarGktTTs20w2" : { ... } 
    }, 
    "vocabulary" : { 
    "en" : { 
     "5v1a1PaDKnTvvOH19kaFTa1iyOx2" : { 
     "definitions" : { 
      "a fruit that grows on a tree" : true 
     }, 
     "word" : "apple" 
     }, 
     "kXHakBKxk9TrAlWL1vTOCe0akk80" : { ... }, 
     "xSKSqB312JMrsFig15pvMbvqAAt0" : { ... } 
    } 
    } 
} 
+1

回答あなたはwordと、この最初のページの最後の単語のキーを覚えておく必要があります以下。今後の質問:JSONのスクリーンショットを投稿しないでください。JSONをテキストとして投稿してください。[Firebaseデータベースコンソール](https://console.firebase.google.com/)の[Export JSON]リンクをクリックすると簡単に取得できます。プロジェクト/ _ /データベース/データ/)。 JSONをテキストとして検索可能にすることで、実際のデータを使ってテストしたり、答えに使用したりすることができます。一般的には、これは良いことです。 –

答えて

1

あなたはをスキップするアイテムの数を取得し、する項目の数を指定することで、ページ付け思考のSQLの道、から来ているようです。これは、インデックスベースのページネーションです。

もう一方のFirebaseは、カーソルベースのページネーションを使用します。あなたはそれを取得する項目のnimberとを開始する(または終了する)に教えてください。このアイテムは、注文したプロパティの値で識別します。ケースでは、値はwordです。同じ値が複数の子に表示される可能性があるため、2番目のパラメータとして開始/終了する子のキー(5v1a1...で始まるキー)を指定することもできます。

ページサイズが2であるとします。最初の2つの単語は次のようになります。

DatabaseReference allWords = db.getReference().child("users").child(uid).child("words"); 
Query firstPage = allWords.orderByChild("word").limitToFirst(2); 

これにリスナーを付けると、最初の2単語が得られます。今、あなたは二つの言葉の2ページ目が必要な場合は、あなたがでそれらを得る

String lastWordOnPreviousPage = "house"; 
String lastKeyOnPreviousPage = "5v1a1..."; 

Query secondPage = allWords.orderByChild("word").startAt(lastWordOnPreviousPage, lastKeyOnPreviousPage).limitToFirst(2); 
関連する問題