2011-01-14 12 views
11

Nella mia raccolta di mongo, ho diversi record con data e ora. Voglio usare findOne() e restituire il record più vecchio con un parametro where.Ordine MySQL di in mongodb findOne()

Se non è possibile utilizzare findOne(), è tutto a posto. Devo solo restituire il record più vecchio con un parametro where.

Come può essere fatto in MongoDB?

risposta

11

ho dovuto fare questo.

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

scrivendo lo stesso in modo fluido: $ request = $ collection-> find (array ('status' => 0)) -> sort (array ('created' => 1)) -> limit (1) -> getNext(); – dubrox

7

Si può provare questo:

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

BTW questa è la risposta corretta, ma più correttamente per ordinare in campo '_id' in quanto contiene in sé timestamp 'db.collection.find() .sort ({_ id: -1}). limit (1); ' –

+3

FWIW, non è necessario utilizzare gli ID autogenerati di mongo, quindi non è necessariamente garantito che _id contenga un timestamp. Ad ogni modo, anche se stai usando ID mongo, riceverai solo la data di inserimento. Un aggiornamento al campo data/ora del documento non cambierebbe il campo _id e quindi non restituirebbe il timestamp più recente se un documento precedente è stato aggiornato. SOO - Non sono d'accordo sul fatto che sia "più corretto" ordinare dal campo _id. ;) – Kasapo

+0

L'ordinamento con -1 consente di ottenere il risultato inverso, ottenendo il valore più recente dalla raccolta – Jaap

13

Se avete bisogno di un più antico record, utilizzare

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