GeoNear Query给出错误无法找到$ geoNear查询的索引“

时间:2016-08-17 21:33:53

标签: mongodb mongoose

我正在尝试对geonear查询进行POC,但我正在

 Error: error: {
    "ok" : 0,
    "errmsg" : "error processing query: ns=zircon.storeTree: GEONEAR  field=start maxdist=0.045045 isNearSphere=1\nSort: {}\nProj: {}\n planner returned error: unable to find index for $geoNear query",
    "code" : 2

我也创建了我的基本索引。

> db.store.getIndexes();                                   
        [                                                          
                {                                                  
                        "v" : 1,                                   
                        "key" : {                                  
                                "_id" : 1                          
                        },                                         
                        "name" : "_id_",                           
                        "ns" : "zircon.store"                      
                },                                                 
                {                                                  
                        "v" : 1,                                   
                        "key" : {                                  
                                "point" : "2dsphere"               
                        },                                         
                        "name" : "point_2dsphere",                 
                        "ns" : "zircon.store",                     
                        "2dsphereIndexVersion" : 3                 
                },                                                 
                {                                                  
                        "v" : 1,                                   
                        "key" : {                                  
                                "location.Point" : "2dsphere"      
                        },                                         
                        "name" : "location.Point_2dsphere",        
                        "ns" : "zircon.store",                     
                        "2dsphereIndexVersion" : 3                 
                }                                                  
        ]   

我的模特是

```json
{
  "_id": ObjectId("57b4d4437ab5db070e8cc02d"),
  "location": {
    "Point": {
      "x": 47.629104999999996,
      "y": 77.21983919
    }
  },
  "name": "Gulati XX :19",
  "createdDate": ISODate("2016-08-17T21:16:51.605Z"),
  "modifiedDate": ISODate("2016-08-17T21:16:51.605Z")
}
```

请建议我在这里做错了什么..是什么导致geonear仍然没有工作。

2 个答案:

答案 0 :(得分:0)

有同样的错误,问题是我在“location.coordinates”字段而不是“location”字段上创建了索引。这在我的流星开发服务器上运行良好,但一旦推送到登台服务器,db就找不到索引。

创建2dspere索引时,您应该使用“复合”方法,并按照mongo文档在parrent位置字段中执行:https://docs.mongodb.com/manual/core/2dsphere/#id1

鉴于您的json文件和数据库名称,我将尝试以下操作:db.store.createIndex({“location”:“2dspere”}) 要么 db.store.ensureIndex({“location”:“2dspere”})

答案 1 :(得分:-1)

您需要为位置值提供索引。

示例:

{ location : { $near : [ -73.9667, 40.78 ], $maxDistance: 0.10 } }