2011-01-14 13 views
11

Moo koleksiyonumda, zaman damgalarıyla birkaç kayıt var. findOne()'u kullanmak ve en eski kaydı nerede bir parametre ile döndürmek istiyorum.MySQL order by mongodb findOne()

findOne() kullanmak mümkün değilse, sorun değil. En eski kaydı sadece bir parametre ile döndürmem gerek.

Bu MongoDB'de nasıl yapılabilir?

cevap

11

Bunu yapmak zorunda. Bir eski kayıt gerekiyorsa o `db.collection.find damgası kendisi içerdiğinden

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

koleksiyonundan en yeni değeri akıcı şekilde yazabilecektir: $ request = $ collection-> find (array ('status' => 0)) -> sort (array ('oluşturulan' => 1)) -> limit (1) -> getNext(); – dubrox

7

Bu deneyebilirsiniz:

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

kullanmak ancak() .sort ({_ id: -1}) limit (1); ' –

+3

FWIW, mongo'nun otomatik olarak oluşturulmuş kimliklerini kullanmak zorunda değilsiniz, bu nedenle _id'in bir zaman damgası içerdiği garanti edilmez. Yine de, mongo kimlikleri kullanıyor olsanız bile, yalnızca ekleme tarihini alacaksınız. Belgenin zaman damgaları alanındaki bir güncelleme _id alanını değiştirmeyecek ve bu yüzden eski bir belge güncellendiyse gerçek son zaman damgasını döndürmeyecektir. SOO - _id alanını sıralamak için "daha doğru" olduğunu kabul etmiyorum. ;) – Kasapo

+0

-1 ile sıralama, tersi bir sonuç elde edecek ve – Jaap

13

, '_ID' alanına göre sıralamak için daha doğru bir BTW bu, doğru cevap

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