我有一个数据库,记录从GPS单元接收到的消息的unix时间,纬度和经度。我需要一种从该数据库中选择最新的两个条目以在php中使用的方法。
示例数据库条目: [3] => stdClass对象([_id] => MongoDB \ BSON \ ObjectId对象([oid] => 5c7fe3fc1c37210bf96e8182)[纬度] => 53.385360717773 [经度] => -6.6032276153564 [时间] => 1551885285))) >
到目前为止,我只需要一个,我通过搜索最大的时间戳来获得它。有没有办法像mySQL一样简单地返回mongo中的最新两个条目?我注意到'limit'返回的是第一个条目,而不是最后一个:
$options=['limit' => 2];
$filter=[];
//$cursor = $collection->find($filter, $options);
$cursor = $collection->find($filter);
$largest = 0;
foreach($cursor as $document){
if ($largest < $document["Time"]) {
$largest = $document["Time"];
$longitude = $document["Longitude"];
$latitude = $document["Latitude"];
}
感谢您的帮助。
编辑:我发现了这个问题How to get the last N records in mongodb?。 mongo版本有所不同,但原理似乎很合理:使用“ sort”然后“ limit”。语法是完全不同的,我想如何在此版本中将两者结合起来?
“ db.foo.find()。sort({_ id:1})。limit(50);”
$options=['limit' => 2];
$filter=[];
$cursor = $collection->find($filter, $options);
答案 0 :(得分:1)
继续扩展查询,如下所示:
$cursor = $collection->find($filter)->sort(array('_id'=>-1))->limit(2)
答案 1 :(得分:0)
可以使用:
$options = ['sort' => ['Time' => -1], 'limit' => 2];
$filter=[];
$cursor = $collection->find($filter, $options);