2011-01-14 13 views
11

W mojej kolekcji mongo, mam kilka rekordów z sygnaturami czasowymi. Chcę użyć findOne() i zwrócić najstarszy rekord z parametrem where.Kolejność MySQL w mongodb findOne()

Jeśli nie można użyć findOne(), wszystko jest w porządku. Po prostu muszę zwrócić najstarszy rekord z parametrem where.

Jak to zrobić w MongoDB?

Odpowiedz

11

musiałem to zrobić.

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

w sposób płynny: $ request = $ collection-> find (array ('status' => 0)) -> sort (array ('created' => 1)) -> limit (1) -> getNext(); – dubrox

7

Można spróbować to:

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

BTW to jest poprawna odpowiedź, ale bardziej poprawnie sortować według polu „_id”, ponieważ zawiera sam znacznik czasu 'db.collection.find() .sort ({_ id: -1}). limit (1); ' –

+3

FWIW, nie musisz używać automatycznie generowanych identyfikatorów Mongo, więc niekoniecznie musi być pewność, że _id zawiera znacznik czasu. W każdym razie, nawet jeśli używasz identyfikatorów mongo, dostaniesz tylko datę wstawienia. Aktualizacja pola znaczników czasu dokumentu nie zmieni pola _id, a zatem nie zwróci rzeczywistego ostatniego znacznika czasu, jeśli starszy dokument był aktualizowany. SOO - Nie zgadzam się, że "poprawniejsze" jest sortowanie według pola _id. ;) – Kasapo

+0

Sortowanie z -1 spowoduje uzyskanie odwrotnego wyniku, pobranie najnowszej wartości z kolekcji – Jaap

13

Jeśli potrzebujesz najstarszy rekord, użyj

db.collection.find().sort({ created: *1* }).limit(1) 
Powiązane problemy