如何使用mongoimport导入CSV文件?

209

联系信息的CSV文件:

Name,Address,City,State,ZIP  
Jane Doe,123 Main St,Whereverville,CA,90210  
John Doe,555 Broadway Ave,New York,NY,10010 

运行此代码不会向数据库添加文档:

$ mongoimport -d mydb -c things --type csv --file locations.csv --headerline

Trace说imported 1 objects,但在运行db.things.find()命令后,MongoDB shell并没有显示出任何新的文档。

我缺少了什么?


要将CSV导入到嵌套文档(带有子文档或数组)的集合中,您可以使用AWK - http://www.joyofdata.de/blog/import-csv-into-mongodb-with-awk-json/ - Raffael
23个回答

266

针对MongoDB 1.6.3和1.7.3,你的示例可以正常工作。下面的示例是针对1.7.3版本的。你是否正在使用旧版本的MongoDB?

$ cat > locations.csv
Name,Address,City,State,ZIP
Jane Doe,123 Main St,Whereverville,CA,90210
John Doe,555 Broadway Ave,New York,NY,10010
 ctrl-d
$ mongoimport -d mydb -c things --type csv --file locations.csv --headerline
connected to: 127.0.0.1
imported 3 objects
$ mongo
MongoDB shell version: 1.7.3
connecting to: test
> use mydb
switched to db mydb
> db.things.find()
{ "_id" : ObjectId("4d32a36ed63d057130c08fca"), "Name" : "Jane Doe", "Address" : "123 Main St", "City" : "Whereverville", "State" : "CA", "ZIP" : 90210 }
{ "_id" : ObjectId("4d32a36ed63d057130c08fcb"), "Name" : "John Doe", "Address" : "555 Broadway Ave", "City" : "New York", "State" : "NY", "ZIP" : 10010 }

3
要在导入时进行身份验证,您可以执行以下命令:mongoimport -d 数据库名 -c 集合名 --type csv --file 文件名.csv --headerline --host 主机名:端口号 --authenticationDatabase admin --username '用户名' --password '密码'。请注意,这是针对CSV文件的情况。 - Chenna V

30

我曾经遇到一个类似的问题,在使用mongoimport时没有出现错误,但是报告导入了0条记录。我保存的文件没有按照"Windows逗号分隔(.csv)"格式指定,默认使用了OSX Excel for Mac 2011版本中的“另存为…” “xls as csv”选项。在研究了这个网站并尝试了再次使用“Windows逗号分隔(.csv)”格式进行“另存为”后,mongoimport就可以正常工作了。我认为mongoimport期望每行都有一个换行符,而默认的Mac Excel 2011 csv导出没有在每行末尾提供该字符。


当处理CSV文件时,Excel确实是一个奇怪的野兽,这也包括尝试在其他数据库上导入CSV,它不是严格与mongo相关的问题。我建议在处理CSV时使用Google Sheets,它是免费的,在线的,并且可以导入/导出格式正确的CSV和TSV。 - MacK

26

我们需要执行以下命令:

mongoimport --host=127.0.0.1 -d database_name -c collection_name --type csv --file csv_location --headerline

-d是数据库名称

-c是集合名称

--headerline 如果使用--type csv或--type tsv,则使用第一行作为字段名称。否则,mongoimport将把第一行导入为单独的文档。

了解更多信息: mongoimport


6

如果您在生产环境下工作,很可能需要进行身份验证。您可以使用类似以下内容的方法,使用适当的凭据对正确的数据库进行身份验证。

mongoimport -d db_name -c collection_name --type csv --file filename.csv --headerline --host hostname:portnumber --authenticationDatabase admin --username 'iamauser' --password 'pwd123'

4
我在mongoimport shell中使用这个。
mongoimport --db db_name --collection collection_name --type csv --file C:\\Your_file_path\target_file.csv --headerline

类型可以选择csv/tsv/json。但只有csv/tsv可以使用--headerline

您可以在官方文档中阅读更多信息。


3

请确保文件末尾有一个空行,否则在某些版本的mongoimport中,最后一行将被忽略。


3

在尝试导入CSV文件时,我遇到了一个错误。我采取了以下措施。首先,我将标题行的列名更改为大写字母,并删除“-”,如果需要,则添加“_”。然后键入以下命令将CSV导入Mongo。

$ mongoimport --db=database_name --collection=collection_name --type=csv --file=file_name.csv --headerline  

enter image description here


1

Robert Stewart已经回答了如何使用mongoimport导入的问题。

我建议使用3T MongoChef工具(3.2+版本)来优雅地导入CSV文件。可能会在将来帮助某些人。

  1. 您只需要选择集合
  2. 选择要导入的文件
  3. 您还可以取消选择要导入的数据。 还有许多选项可供选择。
  4. 集合已导入

请参见如何导入视频


1

对于3.4版本,请使用以下语法:

mongoimport -u "username" -p "password" -d "test" -c "collections" --type csv --file myCsv.csv --headerline

经过3天的努力,我终于独立完成了。感谢所有支持我的用户。


1
我的要求是将没有标题的.csv文件导入到远程的MongoDB实例中。对于mongoimport v3.0.7,以下命令对我有效:
mongoimport -h <host>:<port> -u <db-user> -p <db-password>  -d <database-name> -c <collection-name> --file <csv file location> --fields <name of the columns(comma seperated) in csv> --type csv

例如:

mongoimport -h 1234.mlab.com:61486 -u arpitaggarwal -p password  -d my-database -c employees --file employees.csv --fields name,email --type csv

以下是导入后的截图:

enter image description here

其中nameemail.csv文件中的列。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接