2011-01-14 8 views
11

私のmongoのコレクションには、タイムスタンプ付きのレコードがいくつかあります。私はfindOne()を使い、whereパラメータで最も古いレコードを返したいと思います。mongodbのMySQL order by findOne()

findOne()を使用できない場合は問題ありません。どこのパラメータでもっとも古いレコードを返す必要があります。

これはどのようにMongoDBで行うことができますか?

答えて

11

私はこれをしなければなりませんでした。

$request = $collection_requests->find(array('status' => 0)); 
$request->sort(array('created' => 1)); 
$request->limit(1); 
$request->next(); 
$request = $request->current(); 
+7

は最新の値を流暢に書いています。$ request = $ collection-> find(array( 'status' => 0)) - > sort(array( 'created' => 1)) - > limit(1) - > getNext(); – dubrox

7

あなたはこれを試すことができます。

db.collection.find().sort({timestamps : -1}).limit(1); 
+1

ところで、これは正解ですが、それは、タイムスタンプ自体 'db.collection.findが含まれているように、より正確に「_id」フィールドでソートすることを使用()_sort({_ id:-1})。limit(1); ' –

+3

FWIWでは、mongoの自動生成されたIDを使用する必要はないので、必ず_idにタイムスタンプが含まれているとは限りません。とにかく、あなたがmongo IDを使っていても、あなたは挿入日だけを取得します。ドキュメントのタイムスタンプフィールドを更新しても_idフィールドは変更されないため、古いドキュメントが更新された場合は実際の最新のタイムスタンプは返されません。 SOO - 私は_idフィールドでソートするのが "もっと正しい"という意見に同意します。 ;) – Kasapo

+0

-1をソートすると、逆の結果が得られます。 – Jaap

13

あなたは最古記録が必要な場合は、

db.collection.find().sort({ created: *1* }).limit(1)