Невозможно найти индекс для $ geoNear Laravel - PullRequest
0 голосов
/ 18 мая 2018

Я использую модель Moloquent с Laravel 5.6.вот моя запись коллекции, приведенная ниже: -

{
    "_id" : ObjectId("5afe619dbe0b8d0e5876b16b"),
    "name" : "Central Park",
    "categories" : [ 
        "4d4b7105d754a06376d81259", 
        "4bf58dd8d48988d116941735", 
        "4bf58dd8d48988d119941735", 
        "4d4b7105d754a06376d81259", 
        "4bf58dd8d48988d116941735", 
        "4bf58dd8d48988d119941735", 
        "4d4b7105d754a06374d81259", 
        "4bf58dd8d48988d16d941735"
    ],
    "loc" : {
        "type" : "Point",
        "coordinates" : [ 
            88.4166612820784, 
            22.5835157504658
        ]
    }
}

Я выполняю этот запрос с контроллера Laravel.

$users = MongoTest::where('loc', 'near', [
                    '$geometry' => [
                        'type' => 'Point',
                        'coordinates' => [
                            $longitude,
                            $latitude,
                        ],
                    ],
                    '$maxDistance' => 10,
                ])->get();

print_r($users);

Я получаю эту ошибку: -

error processing query: ns=tkit.testTree: GEONEAR  field=loc maxdist=10 isNearSphere=0
Sort: {}
Proj: {}
 planner returned error: unable to find index for $geoNear query

Как я могу решить эту проблему?

1 Ответ

0 голосов
/ 18 мая 2018

Создать индекс из оболочки Монго.* 2sphere index ожидается запросом с использованием оператора $near или $nearSphere или команды geoNear,или даже этап агрегации $geoNear.

Метод createIndex() сделает это за вас, поэтому просто назовите вашу коллекцию в правильной базе данных:

db.collection.createIndex({ "loc": "2dsphere" })

Обратите внимание, что любой API, фактически использующий команду geoNear, действительно нуждается в обновлении до одного из упомянутых операторов запросов, так как эта команда «устарела» начиная с MongoDB 4.0 и будет

В операциях по поиску «ближайших» следует использовать $near или $nearSphere, а те, которые хотят вернуть «расстояние», должны использовать$geoNear вместо конвейера.

...