2011-01-14 4 views
11

В моей коллекции монго у меня есть несколько записей с отметками времени. Я хочу использовать findOne() и вернуть самую старую запись с параметром where.MySQL заказать у mongodb findOne()

Если вы не можете использовать findOne(), все в порядке. Мне просто нужно вернуть самую старую запись с параметром where.

Как это можно сделать в MongoDB?

ответ

11

Я должен был сделать это.

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

, написав то же самое бегло: $ request = $ collection-> find (array ('status' => 0)) -> sort (array ('created' => 1)) -> limit (1) -> getNext(); – dubrox

7

Вы можете попробовать это:

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

BTW это правильный ответ, но более правильно сортировать по полю «_ID», как он сам содержит временную метку 'db.collection.find() .sort ({_ id: -1}). limit (1); ' –

+3

FWIW, вам не нужно использовать автогенерируемые идентификаторы mongo, поэтому не обязательно гарантирует, что _id содержит метку времени. В любом случае, даже если вы используете идентификаторы mongo, вы получите только дату вставки. Обновление поля временных меток документа не изменило бы поле _id и, таким образом, не вернет фактическую последнюю метку времени, если старый документ был обновлен. SOO - Я не согласен с тем, что «более правильно» сортировать по полю _id. ;) – Kasapo

+0

Сортировка с -1 приведет к обратному результату, получив самое новое значение из коллекции – Jaap

13

Если вам нужен старейшей запись, используйте

db.collection.find().sort({ created: *1* }).limit(1) 
Смежные вопросы