如何使用Laravel eloquent基于纬度和经度从mongodb获取位置?

时间:2018-05-17 17:49:21

标签: php mongodb laravel

我正在使用Moloquent模型从Laravel中的MongoDB中获取数据。

除了获取基于纬度和经度的数据外,一切都很好。这就是我的收藏品的样子:

{
   "_id" : "some_id",
   "place_id" : "353789030392849490",
   "latitude": "22.5726",
   "longitude" : "88.3639"
}

在MySQL和Laravel Eloquent中,我们可以使用纬度和经度来获取数据:

DB:select("SELECT id, (
    6371 * acos( cos( radians(37) ) * cos( radians( lat ) ) 
    * cos( radians( long ) - radians(-122) )
    + sin( radians(37) ) * sin(radians(lat)) )
) AS distance 
FROM myTable
HAVING distance < 50
ORDER BY distance")->get();

我可以使用Laravel Eloquent从MongoDB获取数据吗?或者我是否需要以其他方式进行此操作?

PS。我是MongoDB的新手。

1 个答案:

答案 0 :(得分:1)

您可以像laravel-mongodbREADME.md中所说的那样执行此操作:

$users = User::where('location', 'near', [
    '$geometry' => [
        'type' => 'Point',
        'coordinates' => [
            -0.1367563,
            51.5100913,
        ],
    ],
    '$maxDistance' => 50,
]);
  

注意:按此顺序指定坐标:经度,纬度。

您的收藏集应该有2dsphere索引:https://docs.mongodb.com/manual/core/2dsphere/

集合的一个例子:

{
    loc : { type: "Point", coordinates: [ -73.97, 40.77 ] },
    name: "Central Park",
    category : "Parks"
}

有关$nearhttps://docs.mongodb.com/manual/core/2dsphere/

的详细信息