Как получить местоположение из mongodb, основываясь на широте и долготе, используя Eraquent Laravel? - PullRequest
0 голосов
/ 17 мая 2018

Я использую Moloquent модель для извлечения данных из MongoDB в Laravel.

Все было хорошо, кроме получения данных на основе широты и долготы. Вот так выглядит моя коллекция:

{
   "_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 голосов
/ 17 мая 2018

Вы можете сделать это следующим образом, как указано в README.md из laravel-mongodb :

$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/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...