无法找到 $geoNear Laravel 的索引
Unable to find index for $geoNear Laravel
我将 Moloquent 模型与 Laravel 5.6 一起使用。这是我的 collection 记录如下:-
{
"_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
我该如何解决这个问题?
从 mongo shell 创建索引。 2sphere
index is expected by the query using the $near
or $nearSphere
operator or geoNear
command, or even the $geoNear
聚合管道阶段。
createIndex()
方法将为您完成此操作,因此只需在正确的数据库中命名您的 collection:
db.collection.createIndex({ "loc": "2dsphere" })
请注意,任何实际使用 geoNear
命令的 API 确实需要更新到其他提到的查询运算符之一,因为此命令是 "deprecated" 来自 MongoDB 4.0之后将被删除。
寻找 "nearest" 的操作应该使用 $near
or $nearSphere
, and those which want to return the "distance" should use the $geoNear
流水线阶段。
我将 Moloquent 模型与 Laravel 5.6 一起使用。这是我的 collection 记录如下:-
{
"_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
我该如何解决这个问题?
从 mongo shell 创建索引。 2sphere
index is expected by the query using the $near
or $nearSphere
operator or geoNear
command, or even the $geoNear
聚合管道阶段。
createIndex()
方法将为您完成此操作,因此只需在正确的数据库中命名您的 collection:
db.collection.createIndex({ "loc": "2dsphere" })
请注意,任何实际使用 geoNear
命令的 API 确实需要更新到其他提到的查询运算符之一,因为此命令是 "deprecated" 来自 MongoDB 4.0之后将被删除。
寻找 "nearest" 的操作应该使用 $near
or $nearSphere
, and those which want to return the "distance" should use the $geoNear
流水线阶段。