読者です 読者をやめる 読者になる 読者になる

mongoDBでだいたい新しい順番にドキュメントを取得する

mongoDB

mongoDBのコレクションにはnatural orderという概念があります。sortせずにfindするとインサートされた時間が古いものから順番に取得されますが、この並び順がnatural order。

新しい順にドキュメントを取得したい場合は sort に { $natural: -1 } と指定すればおけー

db.Hoge.find().sort({ $natural: -1 });

連番フィールドや時刻フィールドを用意してsortするよりもかなり速いです。

ただし、natural orderはディスク上の物理的な順番なので、分散環境でチャンク移動が発生した場合や、updateでドキュメントが大きく変更された場合などに変わってしまいます。だいたい新しい順でいいやー、というようなゆるい状況でなければ使えません。

※ capped collectionはインサート順とnatural orderが常に一致することが保証されています。