2017-01-15 7 views
0

ExpressとMongooseでREST APIを実装しています。私は、多数のドキュメントを持つコレクションの結果をページ付けする作業に取り組んでいます。ドキュメントは、created_at,updated_atおよびスコアのようなフィールドを持つソーシャルメディアの投稿です。MongoDB REST API動的データページ番号

データの性質上、制限とページ番号を使用する通常のページング実装は機能しません。ユーザが検索結果を参照している間に投稿を削除または追加することができます。

MongoDBのドキュメントで提案されているように、範囲ベースのページネーションを実装できます。 ページ内の最後の項目created_at値を使用して次のページを照会することができます。

Post.find({ created_at: { $gt: req.query.next } }) 

しかし、私はで結果をソートしたい場合に特有のものではないか、すべてのスコアが同じであるスコア?

+1

Mongo 'cursor.sort()'は2つ以上のフィールドに基づいてソートすることができます –

+0

私は質問に答えました。私はそれを動作させるためにキーの組み合わせを見つけることができません。 created_atとscoreでソートすると違いはありません。 – kestutisb

答えて

0

これを行うには複数の方法がありますが、あなたの場合、find/sort条件を動的に作成してfindステートメントで使用することをお勧めします。ちょうどあなたのアイデアを与えるために私の頭アウタ

var MyFilter = {}; 
var MySort = {}; 
if (req.query.created_at != undefined) { 
    MyFilter = { created_at : { $gte : req.query.created_at) } }; 
} 

if (req.query.sortOn != undefined){ 
    MySort = { req.query.sort : 1 }; 
} 

Post.find(MyFilter) 
.sort(MySort) 
.exec(function (err, posts) { 
    ===do your stuff=== 
}); 
関連する問題