返回来自mongo数据库的最新2条记录?

时间:2019-03-27 11:53:45

标签: mongodb

我有一个数据库,记录从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);

2 个答案:

答案 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);