2011-01-14 25 views
11

En mi colección de mongo, tengo varios registros con marcas de tiempo. Quiero usar findOne() y devolver el registro más antiguo con un parámetro where.MySQL ordenar por mongodb findOne()

Si no es posible usar findOne(), está bien. Solo necesito devolver el registro más antiguo con un parámetro where.

¿Cómo se puede hacer esto en MongoDB?

Respuesta

11

que tenía que hacer esto.

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

escribiendo de la misma manera fluida: $ request = $ collection-> find (array ('status' => 0)) -> sort (array ('created' => 1)) -> limit (1) -> getNext(); – dubrox

7

Puede probar esto:

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

Por cierto esta es la respuesta correcta, pero más correctamente para ordenar por el campo '_id' marca de tiempo, ya que contiene en sí 'db.collection.find() .sort ({_ id: -1}). limit (1); ' –

+3

FWIW, no tiene que usar los ID autogenerados de mongo, por lo que no se garantiza necesariamente que _id contenga una marca de tiempo. De todos modos, incluso si usa ID de mongo, solo obtendrá la fecha de inserción. Una actualización del campo de marcas de tiempo del documento no cambiaría el campo _id y, por lo tanto, no devolvería la última marca de tiempo real si se actualizó un documento anterior. SOO - No estoy de acuerdo con que sea "más correcto" ordenar por _id campo. ;) – Kasapo

+0

Al ordenar con -1 obtendrá el resultado invertido, obteniendo el valor más reciente de la colección – Jaap

13

Si necesita un registro más antiguo , utilice

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