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

Mongoose/Nodejsでの遅延読み込み/その他のデータスクロール

    「ページング」の一般的な概念は、.skip()を使用することです。 これは、すでに取得された結果を本質的に「スキップ」するため、本質的にこれを行うことができます:

    var q = Post.find().sort( "rating" ).skip(10).limit(10);
    

    しかし、実際には、ご想像のとおり、いくつかの「ページ」を取得すると、これはかなり遅くなります。したがって、よりスマートなものが本当に必要です。基本的に、これは、取得された最後の結果セットよりも高い(または降順の場合は低い)結果を取得する「範囲クエリ」です。したがって、5の最後の値が与えられます 次に、あなたが行うよりも多くの場合:

    var q = Post.find({ "rating": { "$gt": 5 } }).sort( "rating" ).limit(10);
    

    見た目は大丈夫ですが、実際にはまだ問題があります。次の「ページ」にも評価5の結果が含まれている場合はどうなりますか?このクエリはそれらをスキップし、表示することはありません。

    賢明なことは、すべての_idを「保持」することです。 一意のキーであるため、ドキュメントの値。基本的に同じ種類のものを適用しますが、今回は前のページの結果を新しいページに含めないようにします。 $nin オペレーターはここで役立ちます:

    var q = Post.find({ "rating": { "$gte": 5 }, "_id": { "$nin": seenIds } })
        .sort( "rating" ).limit(10);
    

    seenIdsかどうか は結果の最後のページであるか、それ以上は並べ替える値の「密度」に依存します。もちろん、これらをセッション変数などに「保持」する必要があります。

    ただし、範囲クエリは通常、最高のパフォーマンス結果であるため、これを適応させるようにしてください。




    1. MapReduceの結果は100に制限されているようですか?

    2. NodeMongoRESTサービス投稿

    3. Mongodb計算クエリ-累積乗算

    4. IXSCANを実行した後にMongoがFETCHでnullフィルターをクエリする理由