错误16755 - Mongo无法提取地理位置密钥

时间:2016-12-02 15:40:27

标签: mongodb geolocation

我是mongo和node.js的开始,在现有项目中,我们有一个带有geolocs商店的集合。我收到以下错误(我删除了一些字段)

"code" : 16755,
"errmsg" : "Can't extract geo keys: { _id: ObjectId('566990eea9c7a38740a305a3'), 
id: 50, guid: \"NL7a09b334-7524-102d-a4ef-00163e5faa0c\", version: 0, owner: 118, 
published: 1, loc: [ -9999, -9999 ], logo: \"69db95d0-d58d-40cf-80d3-ac80b8c86af8.png\" }  
can't project geometry into spherical CRS: [ -9999, -9999 ]"

当我尝试$set商店的某些价值观时。我看到值-9999,-9999不正确但是当我尝试用(在Robomongo中)替换其他值时,我得到相同的错误。如何修复此错误,以便我可以修改loc中的值并执行$set

1 个答案:

答案 0 :(得分:0)

您说错误是因为该文档中的地理坐标无效(请参阅2dsphere indexes)。

假设这是你的文件:

> db.test.find()

{
  "_id": ObjectId("566990eea9c7a38740a305a3"),
  "id": 50,
  "guid": "NL7a09b334-7524-102d-a4ef-00163e5faa0c",
  "version": 0,
  "owner": 118,
  "published": 1,
  "loc": [
    -9999,
    -9999
  ],
  "logo": "69db95d0-d58d-40cf-80d3-ac80b8c86af8.png"
}

最简单的方法是使用mongo shellperform an update,使用ObjectId并执行$set on the loc field。例如,通过将loc字段设置为有效坐标(例如[-73.97,40.77]):

> db.test.update({"_id": ObjectId("566990eea9c7a38740a305a3")}, {$set:{loc:[-73.97, 40.77]}})

Updated 1 existing record(s) in 1ms
WriteResult({
  "nMatched": 1,
  "nUpserted": 0,
  "nModified": 1
})

请注意,在上面的示例中,我使用了_id字段,该字段保证是唯一的,因此更新命令只会更新该确切文档。之后,您的2dsphere索引创建应该会成功:

> db.test.createIndex({loc:'2dsphere'})

{
  "createdCollectionAutomatically": false,
  "numIndexesBefore": 1,
  "numIndexesAfter": 2,
  "ok": 1
}