ドキュメントは、日付に基づいて降順で保存されます。したがって、コレクションには最初のドキュメントとして20140731が含まれています。
上限付きのコレクションを使用している場合を除き、ディスク上のドキュメントの順序(自然順序とも呼ばれます)は保証されません。
ドキュメントの削除と移動(ドキュメントが割り当てられたレコードスペースを超えた場合)は、再利用される空きリストにスペースを作成します。
これは、mongo
でこれを示す簡単な例です。 シェル:
// Start with an empty database & collection
use demodb; db.dropDatabase(); db.order.drop()
// Add some test data
for (i=0; i<1000; i++) {
db.order.insert({'i': i})
}
// Looks like insertion order! (0..9)
db.order.find({}).limit(10);
// Pause 5s for effect :)
sleep(5000);
// Remove half the entries
db.order.remove({ i: { $lt: 500 }})
// Re-add the missing entries
for (i=0; i<500; i++) {
db.order.insert({'i': i})
}
// Not the entries you expected .. space from deleted records was reused
db.order.find({}).limit(10)
// Clean up demodb
db.dropDatabase()
フィルタ{$gte:20140720、$ lte:20140731}でfindコマンドを使用すると、mongodbは「日付」フィールドの昇順でクエリを返します。
クエリにインデックスが使用されている場合、ドキュメントはインデックスで見つかった順序で返されます。一般的なクエリのインデックスを作成するときは、これを利用する必要があります(「インデックスを使用してクエリ結果を並べ替える」を参照)。
参考までに、単純なインデックス(例:{date:1}
)を使用して、昇順または降順で並べ替えられた結果を返すことができます。
ObjectIDで並べ替え
_id
にMongoDBのデフォルトのObjectIDを使用している場合 、{ _id: 1 }
で並べ替えることができます ObjectID
の最初の4バイト以降の挿入順序を概算する タイムスタンプを組み込みます。これを使用して、date
に基づいてクエリを並べ替える場合 {date:1, _id:1}
のインデックスを確保するおおよその挿入順序 。
ObjectID
に注意してください sは通常、クライアントドライバーによって生成されるため、アプリサーバー(または_id
)にクロックドリフトがある場合 ドキュメントが挿入される少し前に作成されます)ObjectID
■サーバーから見た「挿入順序」を厳密に反映していない場合があります。挿入順序の正確さが非常に重要な場合は、通常、_id
を生成できます。 サーバー側(アプローチはドライバーによって異なります)。