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 字段,该字段是 typefeatures 字段的同级字段。由于这些字段不存在,索引没有条目并且查找查询正在尝试匹配未定义的。

对于包含这些示例文档的集合,索引需要为:

  {"features.geometry":"2dsphere"}

  {"features.geometry":"2d"}

查询需要

db.events.find({
    "features.geometry": {
     ...