【问题标题】:Geonames and MongoDB: Exporting Access 2010 into MongoDB to use geospatial indexGeonames 和 MongoDB:将 Access 2010 导出到 MongoDB 以使用地理空间索引
【发布时间】:2012-11-07 03:56:41
【问题描述】:

我有一个 Access 2010 数据库,其中包含来自 Geonames 的信息。表名是城市。为简单起见,这些列是“名称”、“纬度”、“经度”、“位置”。我创建了“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 坐标中删除引号?我不能用 java 编码,也不介意等待 MongoDB 来执行这个任务。如果它可以导出带有“经度”和“纬度”字段的 CSV 并将它们组合到 MongoDB 中的新“loc”字段中,即使它不是一个漂亮的解决方案,我也不介意。我只需要让“loc”字段与地理空间索引一起使用。

【问题讨论】:

    标签: mongodb csv import ms-access-2010


    【解决方案1】:

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

    db.cities.find( { 'loc' : {$type : 2 } } ).forEach( function (x) { x.loc = x.loc.split(",").map(parseFloat); db.cities.save(x); });
    

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 我同意 JSON,创建了一个测试 .json 文档,并且“loc”导入正常。不幸的是,您链接到的 cmd 工具的 AWS S3 链接已损坏。我向发布者发了推文,希望他能提供一个有效的链接。
      猜你喜欢
      • 2016-02-12
      • 2011-10-23
      • 2014-01-04
      • 2019-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-22
      • 2016-10-02
      相关资源
      最近更新 更多