如何使用 Laravel eloquent 根据经纬度从 mongodb 获取位置?

Posted

技术标签:

【中文标题】如何使用 Laravel eloquent 根据经纬度从 mongodb 获取位置?【英文标题】:How to fetch location from mongodb based on latitude and longitude using Laravel eloquent? 【发布时间】:2018-10-28 02:06:48 【问题描述】:

我在 Laravel 中使用 Moloquent 模型从 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】:

您可以按照laravel-mongodb 的README.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"

有关$near的更多信息:https://docs.mongodb.com/manual/core/2dsphere/

【讨论】:

我应该如何直接构建我的集合,以便执行此查询? 谢谢。让我明天在办公室检查一下。但无论如何,谢谢先生。 是的,先生。这正是我想要的方式。非常感谢先生。 :)

以上是关于如何使用 Laravel eloquent 根据经纬度从 mongodb 获取位置?的主要内容,如果未能解决你的问题,请参考以下文章

如何根据 laravel eloquent orm 中的两列进行查询

如何查询 Laravel Eloquent 的 belongsTo 关系?

Laravel:Mysql 查询到 Eloquent

Laravel Eloquent 根据数据透视表字段条件获取多对多关系

Laravel 验证使用 eloquent 或 raw 查询

Laravel 5:如何使用 'where' 或 'orderBy' 使用 eloquent?