我正在努力使用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"})
Run Code Online (Sandbox Code Playgroud)
然后我在shell中使用了mongoexport命令:
mongoexport -h localhost:3002 -d yourdb -c classes --csv -f student_id,name > export.txt
Run Code Online (Sandbox Code Playgroud)
生成的CSV如下所示:
student_id,name
ObjectID(5143af326d44e1ceb372121d),"II-4"
Run Code Online (Sandbox Code Playgroud)
然后我使用以下方法导入生成的CSV:
mongoimport -h localhost:3002 -d yourdb -c class --type csv --file export.txt --headerline
Run Code Online (Sandbox Code Playgroud)
Quering类集合现在返回:
db.class.find()
{ "_id" : ObjectId("5143afc66d44e1ceb372121e"), "student_id" : ObjectId("5143af326d44e1ceb372121d"), "name" : "II-4" }
{ "_id" : ObjectId("5143b44788df173ba096550e"), "student_id" : "ObjectID(5143af326d44e1ceb372121d)", "name" : "II-4" }
Run Code Online (Sandbox Code Playgroud)
您可以注意到第二个文档中的student_id字段实际上是一个字符串而不是MongoDB ObjectId.
我错了什么或者Mongo无法导入它自己导出的CSV?
小智 38
对于有这个问题的人试图从JSON插入ObjectIds - 对现有数据进行一些修改是非常可能的.
更换:
{ "_id" : ObjectId("5143afc66d44e1ceb372121e"),
"student_id" : ObjectId("5143af326d44e1ceb372121d"),
"name" : "II-4" }
Run Code Online (Sandbox Code Playgroud)
附:
{ "_id" : {"$oid":"5143afc66d44e1ceb372121e"},
"student_id" : {"$oid":"5143af326d44e1ceb372121d"},
"name" : "II-4" }
Run Code Online (Sandbox Code Playgroud)
只需使用正则表达式替换ObjectId换行.
小智 4
该问题可以在 MongoDB 2.4.1 中重现。
\n\n文档(http://docs.mongodb.org/manual/reference/mongoimport/)指出(我强调):
\n\n\n\n\n注意 不要将 mongoimport 和 mongoexport 用于完整实例、\n 生产备份,因为它们无法可靠地捕获数据类型\n 信息。使用 mongodump 和 mongorestore,如 \xe2\x80\x9cBackup\n MongoDB 系统策略\xe2\x80\x9d 中所述,以实现此类功能。
\n
在此讨论中https://groups.google.com/forum/?fromgroups=#!topic/mongodb-user/RcnumM5QyxM回答了类似的问题,如下所示:
\n\n\n\n带有 tsv 或 csv 的 Mongoimport 只能导入 strings 和 numeric,而不能导入 [1] 中指定的任何其他类型。如果您确实想导入这些类型,并且可以为导入文件生成 JSON 而不是 TSV,那么这将是一个好方法;否则,您可以编写后处理步骤,将字符串转换为适当的 MongoDB 类型(基于给定字段的值类型的一些知识)。
\n\n\n
\n\n \n- 担
\n
| 归档时间: |
|
| 查看次数: |
12352 次 |
| 最近记录: |