MongoDB "unable to find index for $geoNear query"
MongoDB "unable to find index for $geoNear query"
我搜索了这些板并发现了类似的问题,但似乎没有解决我在查询时遇到的相同错误。
我的 GeoJSON 数据示例 mongoDB:
{
"type" : "SOMEPOLYGON",
"features" : [
{
"type" : "Feature",
"geometry" : {
"type" : "Polygon",
"coordinates" : [
[
[
-83.606133,
36.606195
],
[
-77.802765,
39.126537
],
[
-75.889428,
36.555319
],
[
-83.606133,
36.606195
]
]
]
},
"properties" : {
"an_id" : "22D49CAA-24B8-420E-A47B-10882578A6DC",
"time" : "2019-02-0419:58:22"
}
}
]
}
{
"type" : "SET OF POINTS",
"features" : [
{
"type" : "Feature",
"geometry" : {
"type" : "Point",
"coordinates" : [
-102.990147,
36.983626
]
},
"properties" : {
"advertiser_id" : "22D49CAA-24B8-420D-A47B-10882578A6DC",
"time" : "2021-02-04 19:58:22"
}
},
{
"type" : "Feature",
"geometry" : {
"type" : "Point",
"coordinates" : [
-94.629912,
36.983626
]
},
"properties" : {
"advertiser_id" : "22D49CAA-24B8-420D-A47B-10882578A6DC",
"time" : "2021-02-05 08:08:04"
}
}
]
}
我在尝试执行以下查询时遇到问题:
db.events.find({
geometry: {
$near: {
$geometry: {
type:"Point",
coordinates:[<long>,<lat>]},
$minDistance: 0,
$maxDistance:500000
}
}
})
当我这样做时,出现以下错误:
错误:错误:{
“好的”:0,
“errmsg”:“错误处理查询:ns=local.eventsTree:GEONEAR field=geometry maxdist=1.79769e+308 isNearSphere=0\nSort:{}\nProj:{}\n planner返回错误 :: 由 :: 无法为 $geoNear 查询找到索引,
“代码”:291,
“代号”:“NoQueryExecutionPlans”
}
我创建了一个 2Dsphere 索引,内容如下:
"MongoDB 企业 > db.events.createIndex({geometry:"2d"})
{
“numIndexesBefore”:1,
“numIndexesAfter”:2,
“自动创建的集合”:假的,
“好的”:1
}
“
我已确认我的索引已创建:
MongoDB 企业 > db.events.getIndexes()
[
{
"v" : 2,
"key" : {
"_id" : 1
},
"name" : "_id_"
},
{
"v" : 2,
"key" : {
"geometry" : "2dsphere"
},
"name" : "geometry_2dsphere",
"2dsphereIndexVersion" : 3
}
]
我执行以下地理空间查询似乎没有问题:
db.events.find({geometry:{$geoWithin:{$centerSphere:[[<long>,<lat>],7]}}})
一个查询有效,但另一个无效。我尝试通过为位置指定嵌套键来更改索引(例如“features.geometry”等)。我也试过将索引更改为 2D。似乎没有什么可以解决此错误。如有任何帮助或建议,我们将不胜感激!
引用不在文档顶层的字段时,必须使用点表示法。
正如所写,该查询和索引都引用 geometry
字段,该字段是 type
和 features
字段的同级字段。由于这些字段不存在,索引没有条目并且查找查询正在尝试匹配未定义的。
对于包含这些示例文档的集合,索引需要为:
{"features.geometry":"2dsphere"}
或
{"features.geometry":"2d"}
查询需要
db.events.find({
"features.geometry": {
...
我搜索了这些板并发现了类似的问题,但似乎没有解决我在查询时遇到的相同错误。
我的 GeoJSON 数据示例 mongoDB:
{
"type" : "SOMEPOLYGON",
"features" : [
{
"type" : "Feature",
"geometry" : {
"type" : "Polygon",
"coordinates" : [
[
[
-83.606133,
36.606195
],
[
-77.802765,
39.126537
],
[
-75.889428,
36.555319
],
[
-83.606133,
36.606195
]
]
]
},
"properties" : {
"an_id" : "22D49CAA-24B8-420E-A47B-10882578A6DC",
"time" : "2019-02-0419:58:22"
}
}
]
}
{
"type" : "SET OF POINTS",
"features" : [
{
"type" : "Feature",
"geometry" : {
"type" : "Point",
"coordinates" : [
-102.990147,
36.983626
]
},
"properties" : {
"advertiser_id" : "22D49CAA-24B8-420D-A47B-10882578A6DC",
"time" : "2021-02-04 19:58:22"
}
},
{
"type" : "Feature",
"geometry" : {
"type" : "Point",
"coordinates" : [
-94.629912,
36.983626
]
},
"properties" : {
"advertiser_id" : "22D49CAA-24B8-420D-A47B-10882578A6DC",
"time" : "2021-02-05 08:08:04"
}
}
]
}
我在尝试执行以下查询时遇到问题:
db.events.find({
geometry: {
$near: {
$geometry: {
type:"Point",
coordinates:[<long>,<lat>]},
$minDistance: 0,
$maxDistance:500000
}
}
})
当我这样做时,出现以下错误:
错误:错误:{ “好的”:0, “errmsg”:“错误处理查询:ns=local.eventsTree:GEONEAR field=geometry maxdist=1.79769e+308 isNearSphere=0\nSort:{}\nProj:{}\n planner返回错误 :: 由 :: 无法为 $geoNear 查询找到索引, “代码”:291, “代号”:“NoQueryExecutionPlans” }
我创建了一个 2Dsphere 索引,内容如下:
"MongoDB 企业 > db.events.createIndex({geometry:"2d"}) { “numIndexesBefore”:1, “numIndexesAfter”:2, “自动创建的集合”:假的, “好的”:1 } “
我已确认我的索引已创建:
MongoDB 企业 > db.events.getIndexes()
[
{
"v" : 2,
"key" : {
"_id" : 1
},
"name" : "_id_"
},
{
"v" : 2,
"key" : {
"geometry" : "2dsphere"
},
"name" : "geometry_2dsphere",
"2dsphereIndexVersion" : 3
}
]
我执行以下地理空间查询似乎没有问题:
db.events.find({geometry:{$geoWithin:{$centerSphere:[[<long>,<lat>],7]}}})
一个查询有效,但另一个无效。我尝试通过为位置指定嵌套键来更改索引(例如“features.geometry”等)。我也试过将索引更改为 2D。似乎没有什么可以解决此错误。如有任何帮助或建议,我们将不胜感激!
引用不在文档顶层的字段时,必须使用点表示法。
正如所写,该查询和索引都引用 geometry
字段,该字段是 type
和 features
字段的同级字段。由于这些字段不存在,索引没有条目并且查找查询正在尝试匹配未定义的。
对于包含这些示例文档的集合,索引需要为:
{"features.geometry":"2dsphere"}
或
{"features.geometry":"2d"}
查询需要
db.events.find({
"features.geometry": {
...