当前位置: 首页 > 知识库问答 >
问题:

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

郁灿
2023-03-14

我正在努力使用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

查询类集合现在返回:

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。

我做错了什么,或者蒙戈不能导入自己导出的CSV??

共有2个答案

曹恩
2023-03-14

该问题可在MongoDB 2.4.1中重现。

文件(http://docs.mongodb.org/manual/reference/mongoimport/)各国(我强调):

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

在此讨论https://groups.google.com/forum/?fromgroups=#!主题/mongodb-user/RcNumM5QyxM类似的问题回答如下:

带有tsv或csv的Mongoimport只能导入字符串和数字,而不能导入[1]中指定的任何其他类型。如果您确实想要导入这些类型,并且如果您可以为导入文件生成JSON而不是TSV,那么这将是一个很好的方法;否则,您可以编写一个后处理步骤,将字符串转换为适当的MongoDB类型(基于对给定字段的值类型的一些了解)。

[1] http://www.mongodb.org/display/DOCS/Mongo扩展JSON

澹台啸
2023-03-14

对于任何试图从JSON插入ObjectIds的人来说,只要对存量数据进行一点修改,这是非常可能的。

替换:

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

与:

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

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

 类似资料:
  • 问题内容: 我是新手,想知道有关从一台服务器导入文件到另一台服务器的信息。我尝试了以下命令,它对我来说很好用。现在,我想知道当有多个文件时,如何一次导入所有文件。我找不到任何相关的文档,这是不可能的。请帮助我,这可能吗? 问题答案: 您总是可以编写一些shell脚本。

  • 我正在开发一个脚本,该脚本分析SQL表中的数据,最后生成一个CSV文件。 生成文件后,我将登录到我的google sheet帐户,并使用导入选项将我的CSV文件导入到google电子表格中 手工劳动有点愚蠢,我想把这个能力添加到我的脚本中。 因此,我遵循了这个指南,Python快速入门,并且能够完成所有步骤。 然后,我遵循GoogleSheetsAPI参考并研究了方法:电子表格。创造如果我理解正确

  • 想要知道更多东西吗?当你需要从表中查找某些值时,可以使用冗长的 case 语句或 selectors 实现,但更整洁的方式是使用 extlookup 函数实现。 在 puppetmaster 上可以使用 extlookup 函数查询外部的 CSV 文件,并返回匹配的数据片段。 将所有数据组织到一个单一的文件并将它从 Puppet 配置清单中分离出来, 可以使维护工作变得更简单,也便于与其他人分享:

  • 我用的是Oracle 10g,SQL Developer我想知道有没有办法从CSV文件导入数据,其中字段用','分隔,行用' \n '结束使用SQL查询我尝试了这个查询 < code >将文件“C:/tmp.csv”中的数据加载到表CSVTEST2字段终止于“,”行终止于“\n”忽略1行(ID,FIRSTNAME,LASTNAME,birth date); 但是它不起作用,我总是从sql开发人员那

  • 本文向大家介绍如何在R中从Github导入CSV文件数据?,包括了如何在R中从Github导入CSV文件数据?的使用技巧和注意事项,需要的朋友参考一下 如果您在Github上有一个csv文件,则可以通过使用其URL直接将其导入R中,但是请确保在存储数据的Github页面上单击Raw选项。许多人没有单击Raw选项,因此他们阅读HTML而不是CSV并感到困惑。在这里,我正在共享一个包含数据集列表的公共

  • 本文向大家介绍R导入.csv文件,包括了R导入.csv文件的使用技巧和注意事项,需要的朋友参考一下 示例 使用base R导入 可以使用read.csv来包装逗号分隔的值文件(CSV),该文件可以包装read.table,但可用于sep = ","将分隔符设置为逗号。 用户友好选项file.choose允许浏览目录: 笔记 与不同read.table,read.csv默认为header = TRU