如何使用mongoimport从CSV文件导入Mongodb ObjectId?

时间:2013-03-11 00:08:22

标签: mongodb

我正在努力使用mongoimport从CSV文件导入Mongodb的ObjectId:

我尝试了我能想到的每种组合和转义方法,但无法从CSV正确导入ObjectId。

首先,我尝试将从MongoDB导出的确切内容导入CSV。 我正在使用MongoDB 2.2.1。

我刚创建了两个集合,并在另一个文档中引用了一个文档的_id:

use yourdb
db.createCollection("student")
db.createCollection("class")
db.student.insert({"name":"Peter"})
db.student.find() returns { "_id" : ObjectId("5143af326d44e1ceb372121d"), "name" : "Peter" }
db.class.insert({"student_id": ObjectId("5143af326d44e1ceb372121d"),"name":"II-4"})

然后我在shell中使用了mongoexport命令:

mongoexport -h localhost:3002 -d yourdb -c classes --csv -f student_id,name > export.txt

生成的CSV如下所示:

student_id,name
ObjectID(5143af326d44e1ceb372121d),"II-4"

然后我使用:

导入生成的CSV
mongoimport -h localhost:3002 -d yourdb -c class --type csv --file export.txt --headerline

Quering类集合现在返回:

db.class.find()
{ "_id" : ObjectId("5143afc66d44e1ceb372121e"), "student_id" :   ObjectId("5143af326d44e1ceb372121d"), "name" : "II-4" }
{ "_id" : ObjectId("5143b44788df173ba096550e"), "student_id" : "ObjectID(5143af326d44e1ceb372121d)", "name" : "II-4" }

您可以注意到第二个文档中的student_id字段实际上是一个字符串而不是MongoDB ObjectId。

我错了什么或者Mongo无法导入它自己导出的CSV ??

2 个答案:

答案 0 :(得分:34)

对于有此问题且试图从JSON插入ObjectIds的任何人 - 可以对现有数据进行一些修改。

替换:

{ "_id" : ObjectId("5143afc66d44e1ceb372121e"),
  "student_id" : ObjectId("5143af326d44e1ceb372121d"),
  "name" : "II-4" }

使用:

{ "_id" : {"$oid":"5143afc66d44e1ceb372121e"},
  "student_id" : {"$oid":"5143af326d44e1ceb372121d"},
  "name" : "II-4" }

只需使用正则表达式替换ObjectId换行。

答案 1 :(得分:3)

问题可以在MongoDB 2.4.1中重现。

文档(http://docs.mongodb.org/manual/reference/mongoimport/)声明(我强调):

  

注意不要将mongoimport和mongoexport用于完整实例,   生产备份,因为它们无法可靠地捕获数据类型   信息即可。使用mongodump和mongorestore,如“备份”中所述   MongoDB系统的策略“用于此类功能。

在此讨论https://groups.google.com/forum/?fromgroups=#!topic/mongodb-user/RcnumM5QyxM中,类似的问题得到了回答:

  

使用tsv或csv的Mongoimport 只能导入字符串和数字,以及   不是[1]中指定的任何其他类型。如果你想导入   这些类型,如果你可以为你的生产JSON而不是TSV   导入文件,这将是一个很好的方式;否则,你可以写   后处理步骤,将字符串转换为适当的字符串   MongoDB类型(基于对某些类型的值的了解)   给定的字段应该是)。

     
      
  •   
     

[1] http://www.mongodb.org/display/DOCS/Mongo+Extended+JSON