Mongo db geo附近没有在laravel工作

时间:2016-01-12 09:38:20

标签: php mongodb laravel-5 mongodb-query latitude-longitude

我正在使用带有mongo Db数据库的Laravel 5。我已经使用jenssegers / laravel-mongodb包来处理所有与mongo相关的函数。一切都很好。

但是当我根据mongodb的这个链接([Geo near query link] [1])提供的信息尝试geonear时。我工作得很好。我使用以下查询来获取我的集合的所有记录之间的距离。

命令: -

({ geoNear: "sale_event",
   near: { 
      type: "Point", 
      coordinates: [ 76.7171945,30.7291196 ] 
      }, 
   spherical: true, 
})

这个查询在命令提示符下工作正常,并给我与结果的距离: -

{
 "results" : [
  {
   "dis" : 0,
   "obj" : {
    "_id" : ObjectId("568e01fc04896fcd208b4575"),
    "seller_rating" : "4.5",
    "latLong" : [
     76.7171945,
     30.7291196
    ],
    "description" : "Where'd",
    "updated_at" : ISODate("2016-01-07T06:13:16.152Z"),
    "created_at" : ISODate("2016-01-07T06:13:16.150Z")
   }
  },
  {
   "dis" : 244708.75191385587,
   "obj" : {
    "_id" : ObjectId("568e01eb04896fcd208b4574"),
    "seller_rating" : "4.5",
    "latLong" : [
     77.0999578,
     28.5561624
    ],
    "description" : "Where'd",
    "updated_at" : ISODate("2016-01-07T06:12:59.263Z"),
    "created_at" : ISODate("2016-01-07T06:12:59.261Z")
   }
  }
 ],
 "stats" : {
  "nscanned" : 20,
  "objectsLoaded" : 2,
  "avgDistance" : 122354.37595692794,
  "maxDistance" : 244708.75191385587,
  "time" : 3
 },
 "ok" : 1
}

但是当我在laravel中使用相同的命令时,它并没有给我相同的结果: -

我添加了以下方法来运行相同的命令。

$r = DB::command(array( 'geoNear' => "sale_events",
  'near' => array( 'type' => "Point", 'coordinates' => array('76.7171945','30.7291196')), 'spherical' => true ));

它给了我以下结果: -

Array
(
    [ok] => 0
    [errmsg] => can't find ns
)

请帮助我如何根据laravel中的mongodb经度和纬度获得laravel的距离。

1 个答案:

答案 0 :(得分:0)

您可能想要创建新的数据库实例。此查询在Laravel 5上运行良好:

$mongodb = \DB::getMongoDB();

    $lat = 3.1416;
    $lng = -99.99999;

    $near = $mongodb->command(array( 
        'geoNear' => "sale_events", 
        'near' => array( 
            'type' => "Point", 
            'coordinates' => array(
                $lng,
                $lat
                )
            ), 
        'spherical' => true, 
        'maxDistance' => 2500 ));