ページネーションの構文は間違っていますが、ObjectId()を使用することはまったく問題ありません。必要なもの:
db.tweets.find().limit(50).sort({"_id":-1});
これは、ツイートを_id
で並べ替えたいことを示しています 値が降順で、最新の50が必要です。問題は、現在の結果セットが変更されているときにページ付けが難しいという事実です。したがって、次のページにスキップを使用するのではなく、最小の_id
結果セット(50番目に新しい_id
値を入力してから、次のページを取得します:
db.tweets.find( {_id : { "$lt" : <50th _id> } } ).limit(50).sort({"_id":-1});
これにより、次の「最新の」ツイートが表示されます。新しい着信ツイートが時間の経過とともにページネーションを台無しにすることはありません。
_id
かどうかを心配する必要はまったくありません。 値は挿入順序に厳密に対応します-99.999%十分に近く、ツイートが最初に来た1秒未満のレベルを実際に気にする人は誰もいません-Twitterが頻繁にツイートを順番どおりに表示しないことに気付くかもしれませんが、それほど重要ではありません。
の場合 重要な場合は、同じ手法を使用する必要がありますが、「ツイート日」では、その日付を単なる日付ではなくタイムスタンプにする必要があります。