0

我有一个 Access 2010 数据库,其中包含来自 Geonames 的信息。表名是城市。为简单起见,这些列是“名称”、“纬度”、“经度”、“位置”。我创建了“loc”来将“经度”和“纬度”组合到一个字段中,这样我就可以使用 MongoDB 的地理空间索引。我必须以字符串格式保存“loc”列,因为我将两个十进制值与中间的逗号组合在一起。

当我将此表导出到 CSV 时,我会跳过“经度”和“纬度”,因为我有新的组合“loc”字段。

CSV 看起来像:

"geonameid", "name", "loc"
1, "Sweden", "18.068287,59.336341"

在我将 MongoImport 运行到“城市”集合后,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 坐标中删除引号?我不能用 java 编码,也不介意等待 MongoDB 来执行这个任务。如果可以导出带有“经度”和“纬度”字段的 CSV 并将它们组合到 MongoDB 中的新“loc”字段中,即使它不是一个漂亮的解决方案,我也不介意。我只需要让“loc”字段与地理空间索引一起使用。

4

2 回答 2

1

将 loc 转换为可用地理空间数组的命令是:

db.cities.find( { 'loc' : {$type : 2 } } ).forEach( function (x) { x.loc = x.loc.split(",").map(parseFloat); db.cities.save(x); });
于 2012-12-29T13:49:00.067 回答
0

您将数字组合到“loc”字段中,所以现在它是一个字符串并且被引用。在导入 MongoDB 之前将其分离回数字。

但是您需要将“loc”字段作为一个数组才能将其与 GEOindex 一起使用 - 并且数组不适用于 CSV。mongoimport --jsonArray您需要找到一种方法将数据从 MS Access 导出到 JSON,然后使用“ ”命令将 JSON 导入 MongoDB

导出对 JSON 的访问 - http://www.divconq.com/2010/export-a-microsoft-access-database-to-json/

于 2012-11-19T08:56:03.953 回答