2011-01-14 5 views
11

In meiner Mongo-Sammlung habe ich mehrere Datensätze mit Zeitstempeln. Ich möchte findOne() verwenden und den ältesten Datensatz mit einem Where-Parameter zurückgeben.MySQL bestellen von in mongodb findOne()

Wenn es nicht möglich ist findOne() zu verwenden, es ist in Ordnung. Ich muss nur den ältesten Datensatz mit einem Where-Parameter zurückgeben.

Wie kann dies in MongoDB getan werden?

Antwort

11

Ich hatte dies zu tun.

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

das gleiche in fließend Art und Weise zu schreiben: $ request = $ Kollektion-> finden (array ('Status' => 0)) -> sort (array ('created' => 1)) -> limit (1) -> getNext(); – dubrox

7

Sie können dies versuchen:

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

BTW ist diese richtige Antwort, aber mehr richtig durch ‚_id‘ Feld zu sortieren, wie es Zeitstempel enthält selbst 'db.collection.find() .sort ({_ id: -1}). limit (1); ' –

+3

FWIW, Sie müssen nicht die von mongo automatisch generierten IDs verwenden, daher ist es nicht unbedingt garantiert, dass _id einen Zeitstempel enthält. Wie auch immer, selbst wenn Sie Mongo-IDs verwenden, erhalten Sie nur das Einfügedatum. Eine Aktualisierung des Zeitstempelfelds des Dokuments würde das _id-Feld nicht ändern und somit nicht den aktuellsten Zeitstempel zurückgeben, wenn ein älteres Dokument aktualisiert wurde. SOO - Ich stimme nicht zu, dass es "richtiger" ist, nach _id-Feld zu sortieren. ;) – Kasapo

+0

mit Sortierung -1 erhalten Ihnen das umgekehrte Ergebnis erhalten, den neuesten Wert aus der Sammlung bekommt – Jaap

13

Wenn Sie einen ältesten Datensatz benötigen, verwenden

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