如何使用 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 Eloquent 根据数据透视表字段条件获取多对多关系