Невозможно найти индекс для $ geoNear Laravel

Я использую 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

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

0

Решение

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

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

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

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

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

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]