我是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
?
答案 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
shell到perform 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
}