3

CouchDB を使用してページ システムを作成しています。

  • 1 ページあたり 10 項目
  • 前のページへのリンク (ある場合)
  • 次のページへのリンク (ある場合)

このトピックに関する記事から、使用skipは最適ではなく、代わりにstartkeyプロパティを使用して最初のドキュメントを指定し、そこから 11 個のドキュメントを読み取り、最初の 10 個を表示し、11番目のキーを使用してリンクを表示する必要があることを理解しています次のページへ。私を悩ませているのは、前のページへのリンクです。記事には次のように書かれています。

前のページへのリンクを設定するのは、現在のスタート キーを次のページに移動するのと同じくらい簡単です。前のスタートキーがない場合、最初のページにいます。

これは、次のページに移動するときに機能します。4 ページから 5 ページに移動すると、前のページが 4 だったことを思い出すことができます。しかし、5 ページから 4 ページに戻ると、ページを引き継ぐ方法がありませんstartkey 3. これはどのように機能しますか?

前のページの最初の要素と一緒に使用して、最初の要素を見つけて、そこへのリンクを作成することは可能endkeyですか (推奨されますか) ?skip=10limit=1

4

2 に答える 2

6

実際には、なしで 11 個のドキュメントしか要求できませんskip。それが Futon の機能です (CouchDB ログを参照)。

トリック

次のページと前のページの両方のリンクは似ています:startkeyは最初または最後の要素で、skip=1重複を避けるために 次に、パラメーターを正しく使用して、descending前のドキュメントまたは次のドキュメントを取得する必要があります。

実行

ページを要求すると、CouchDB は 11 個のドキュメントで応答します。first最初のキーが で、最後のキーが であるとしましょうlast。ページネーション リンクは次のようになります。

"next": /db/_view/myview?descending=true&limit=11&startkey=last&skip=1
"back": /db/_view/myview?descending=false&limit=11&startkey=first&skip=1

ほら!が の場合、ドキュメントを表示する前にドキュメントを反転する必要がdescendingありfalseます。( CouchDB ガイドの「ビューを使用してデータを検索する」では、これらのパラメーターと B ツリーの関係がうまく説明されています。)

ボーナス

limit=1最初または最後のページ (およびtrue または false)の docid を簡単に取得でき、従来のdescendingデータベース (最初、最後、前、次) によく似たページネーション システムを取得できます。

于 2010-10-22T12:23:21.000 に答える
0

11 の代わりに 21 の文書を読む - 前方に 1 つ余分に、後方に 10 つ。一番最初のものは、前のページへの鍵を保持しています。

于 2010-10-19T11:17:16.450 に答える