Mongo导入数据类型

时间:2013-12-28 07:52:25

标签: mongodb grails

我通过此命令将数据导入mongodb

mongoimport -d dataBase --collection ip2location --type csv --file "/home/oodles/git/csv/IP2LOCATION-LITE-DB11.CSV" --fields _id,ipFrom,ipTo,countryCode,countryName,regionName,cityName,latitude,longitude,zipCode,timeZone

导入成功 但问题是

db.ip2Location.find().pretty()

获得

    "_id" : ObjectId("52be7f25c80e0735273985bf"), ///here is requirement need "_id" : NumberLong(1)
    "ipFrom" : NumberLong(16777216),
    "ipTo" : NumberLong(16777471),
    "countryCode" : "AU",
    "countryName" : "AUSTRALIA",
    "regionName" : "QUEENSLAND",
    "cityName" : "SOUTH BRISBANE",
    "latitude" : -27.48333,
    "longitude" : 153.01667,
    "zipCode" : 4101,
    "timeZone" : "+10:00"

第一行是“_id”:ObjectId(“52be7f25c80e0735273985bf”), 但我需要这样:“id”:NumberLong(1)

cvs数据样本

"16777216","16777471","AU","AUSTRALIA","QUEENSLAND","SOUTH BRISBANE","-27.483330","153.016670","4101","+10:00"

1 个答案:

答案 0 :(得分:1)

  

csv数据样本

     

“16777216”,“16777471”,“AU”,“AUSTRALIA”,“QUEENSLAND”,“SOUTH BRISBANE”,“ - 27.483330”,“153.016670”,“4101”,“+ 10:00”

示例行与提供的--fields列表不匹配;它有一个字段少。第一个字段应该是您要使用的_id(或者根据您的示例使用1)。

更正后的行:

  

1,“16777216”,“16777471”,“AU”,“AUSTRALIA”,“QUEENSLAND”,“SOUTH BRISBANE”,“ - 27.483330”,“153.016670”,“4101”,“+ 10:00”< / p>

我测试过,这在MongoDB 2.0.4中按预期工作。

我无法重现您自动添加_id且第一个字段值丢失的结果;当我尝试使用MongoDB 2.0.4时,它按照列出的顺序为字段分配值,以便_id变为16777216,ipFrom为16777471等。我怀疑您可能正在查看插入的文档早期mongoimport会在您的--fields列表未包含_id的位置运行。

您还应该知道mongoimport插入数据(它不会执行更新或upsert)。如果已存在包含_id而非mongoimport的文档,则会忽略该行的该行。

保持字段和CSV数据同步的更简单方法是将字段列表作为CSV中的第一行,然后使用mongoimport --headerline ...代替--fields