11

コレクションにページネーション機能を作りたいです。「開始」位置と「制限」位置を持つドキュメントを見つけて、単一のクエリでドキュメントの総数を取得するにはどうすればよいですか?

4

5 に答える 5

19

1 つのクエリで両方の結果を取得することはできません。できる最善の方法は、1 つの MongooseQueryオブジェクトを使用して両方を取得することです。

var query = MyModel.find({});
query.count(function(err, count) {...});
query.skip(5).limit(10).exec('find', function(err, items) {...});

必要に応じて、フロー制御フレームワークを使用して、asyncそれらを並列でクリーンに実行します。

于 2012-09-22T13:27:12.533 に答える
9

プラグインMongoose Paginateを使用できます。

$ npm install mongoose-paginate

ルートまたはコントローラーの後に、次を追加するだけです:

Model.paginate({}, { page: 3, limit: 10 }, function(err, result) {
    // result.docs 
    // result.total 
    // result.limit - 10 
    // result.page - 3 
    // result.pages 
});
于 2016-03-12T18:35:39.470 に答える
4

多くのページを予定している場合は、skip/limit を使用せず、範囲を計算してください。

同様の質問については、Scott の回答を参照してください: MongoDB - ページング

于 2012-09-22T13:59:13.800 に答える
1

アップデート :

スキップと制限の使用は、ページネーションには適していません。これがそれについての議論です。

@Wes Freeman、良い答えを出しました。リンクされたポーズを読みました。範囲クエリを使用する必要があります。n = 0; i = n + 10; db.students.find({"id":{$ gt:n、$ lt:(n + i)}});

OLD ANSWER(これは使用しないでください)

次のようなものを使用します

n = db.students.find().skip(n).limit(10);
//pass n dynamically, so for page 1 it should be 0 , page 2 it should be 10 etc

その他のドキュメントはhttp://www.mongodb.org/display/DOCS/Advanced+Queriesにあります

于 2012-09-22T09:54:18.103 に答える