我有一个从Geonames的信息Access 2010数据库。表名称为cities。为简单起见,这些列是"name“、"latitude”、"loc“、”loc“。我创建了"loc“将”经度“和”纬度“合并到一个字段中,这样我就可以使用MongoDB的地理空间索引了。我必须以字符串格式保存"loc“列,因为我要组合两个十进制值,中间有一个逗号。
当我将这个表导出到CSV时,我跳过了“经度”和“纬度”,因为我有了新的组合"loc“字段。
CSV如下所示:
"geonameid", "name", "loc"
1, "Sweden", "18.068287,59.336341"
在我运行MongoImport进入"cities“集合之后,loc字段用引号括起来,例如:
{ "_id" : ObjectId("50a9ed157db1bcfe22cddd0a"), "geonameid" : 20, "name" : "Sweden", "loc" : "18.068287,59.336341", }
在这里,我运行一个命令将"loc“转换为一个数组。感谢Stackoverflow上的另一位贡献者,我使用了以下命令:
db.cities.find( { 'loc' : {$type : 2 } } ).forEach( function (x) { x.loc = new Array(x.loc); db.cities.save(x); });
结果是:
{ "_id" : ObjectId("50a9ed157db1bcfe22cddd0a"), "geonameid" : 20, "name" : "Sweden", "loc" : [ "18.068287,59.336341" ], }
如何在"loc“字段中删除gps坐标中的引号?我不会用MongoDB编写代码,也不介意等待java来执行这个任务。如果可以使用“经度”和“纬度”字段导出CSV并将它们合并到MongoDB中的新"loc“字段中,我也不介意,即使这不是一个漂亮的解决方案。我只需要让"loc“字段与地理空间索引一起工作。
发布于 2012-11-19 08:56:04
您将数字组合到"loc“fild中,所以现在它是一个字符串,并被引用。在导入到MongoDB之前,请将其重新分隔为数字。
但是你需要"loc“字段是一个数组才能在GEOindex中使用它--而数组在CSV中是不可能的。您需要找到一种方法将数据从MS Access导出到JSON,然后使用"mongoimport --jsonArray
“命令将JSON导入到MongoDB。
导出访问JSON - http://www.divconq.com/2010/export-a-microsoft-access-database-to-json/
发布于 2012-12-29 13:49:00
将loc转换为可用的地理空间数组的命令为:
db.cities.find( { 'loc' : {$type : 2 } } ).forEach( function (x) { x.loc = x.loc.split(",").map(parseFloat); db.cities.save(x); });
https://stackoverflow.com/questions/13450234
复制相似问题