MySQL order by in mongodb findOne()

11

我在MongoDB的集合中有多条带有时间戳的记录,我想使用findOne()方法并返回符合一定条件的最早的那条记录。

如果无法使用findOne()方法也没关系,我只需要返回符合条件的最早的那条记录。

在MongoDB中该如何实现呢?

3个回答

12

如果您需要最老的记录,请使用

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

12

我不得不这样做。

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

8
$request = $collection->find(array('status'=>0))->sort(array('created'=>1))->limit(1)->getNext(); 将以上代码翻译成通俗易懂的语言,意思是从一个名为$collection的集合中查询所有状态为0的文档,并按照创建时间从早到晚排序后取第一条文档。 - dubrox

7
您可以尝试这个方法:
db.collection.find().sort({timestamps : -1}).limit(1);

1
顺便提一下,这是正确的答案,但更正确的做法是按“_id”字段排序,因为它本身包含时间戳 db.collection.find().sort({_id:-1}).limit(1); - dr.dimitru
3
顺带一提,您不必使用Mongo自动生成的ID,所以不能保证_id包含时间戳。无论如何,即使您正在使用Mongo ID,您也只会得到插入日期。对文档时间戳字段的更新不会更改_id字段,因此如果更新了旧文档,则不会返回实际的最新时间戳。因此,我不同意按_id字段排序是“更正确”的观点。 ;) - Kasapo
使用-1进行排序将获得反向结果,从集合中获取最新的值。 - Jaap

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接