sql >> データベース >  >> NoSQL >> MongoDB

MongoDBの遠隔ページネーション

    良い質問です!

    「いくつ多すぎる?」 -もちろん、それはデータサイズとパフォーマンス要件によって異なります。個人的には、500〜1000を超えるレコードをスキップすると、不快に感じます。

    実際の答えは、要件によって異なります。最新のサイトが行うことは次のとおりです(または、少なくとも一部のサイト)。

    まず、navbarは次のようになります:

    1 2 3 ... 457
    

    合計レコード数とページサイズから最終的なページ番号を取得します。 3ページにジャンプしましょう。これには、最初のレコードからのスキップが含まれます。結果が到着すると、3ページの最初のレコードのIDがわかります。

    1 2 3 4 5 ... 457
    

    もう少しスキップして、5ページに進みましょう。

    1 ... 3 4 5 6 7 ... 457
    

    あなたはその考えを理解します。各ポイントで、最初、最後、現在のページが表示され、現在のページから前後に2ページも表示されます。

    クエリ

    var current_id; // id of first record on current page.
    
    // go to page current+N
    db.collection.find({_id: {$gte: current_id}}).
                  skip(N * page_size).
                  limit(page_size).
                  sort({_id: 1});
    
    // go to page current-N
    // note that due to the nature of skipping back,
    // this query will get you records in reverse order 
    // (last records on the page being first in the resultset)
    // You should reverse them in the app.
    db.collection.find({_id: {$lt: current_id}}).
                  skip((N-1)*page_size).
                  limit(page_size).
                  sort({_id: -1});
    


    1. MongoDBの複数のドキュメントから配列を連結する方法は?

    2. Node.jsのソケットを介したRedis接続

    3. jedis forJavaを使用してDockerRedisクラスターインスタンスに接続するにはどうすればよいですか?

    4. パスワードの検証/Mongooseスキーマによるパスワードの確認