如何使用mongoimport导入csv


189

尝试导入包含联系信息的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,但是启动Mongo shell并运行db.things.find()不会显示任何新文档。

我想念什么?


1
use mydb以前尝试过db.things.find()吗?
凯尔·怀尔德

1
是的-仍然显示db.things中的另一个文档

Answers:


243

您的示例对我适用于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 }

7
谢谢!这对我有用。我之前做过同样的事情,除了以您创建方式创建CSV之外。尝试了一下,它工作正常。我在MS Excel中创建了原始文件,因此猜测每行末尾的换行符有问题。

也为我工作。我用在OS X上结束的LF行保存了文件,并且可以正常工作。
哈什

是否可以将所有记录从csv导入到仅1个对象而不是每个记录1个对象?
Aniket Kapse,2016年

是的,做CSV内容时请远离Word。我遇到过同样的问题。Word和mongoimport中的错误:(
Matt Fletcher

2
为了能够在导入时进行身份验证,您可以做mongoimport -d db_name -c collection_name --type csv --file filename.csv --headerline --host hostname:portnumber --authenticationDatabase admin --username 'iamauser' --password 'pwd123'
blueskin '18

29

我困惑于类似的问题,其中mongoimport不会给我一个错误,但是会报告导入0条记录。我使用默认的“另存为..”“ xls作为csv”(未指定Windows Comma Separated(.csv)”格式)保存了使用MacX的OSX Excel for Mac 2011版本无法正常工作的文件。在研究了该站点并尝试使用“ Windows逗号分隔(.csv)再次另存为”格式后,mongoimport正常运行。我认为mongoimport期望每行都使用换行符,并且默认的Mac Excel 2011 csv导出不提供该功能每行末尾的字符。


在处理CSV文件时,Excel确实是一个怪兽,它还包括尝试在其他数据库上导入CSV的行为,严格来说,这不是与mongo相关的问题。我建议在处理CSV时使用Google表格,它是免费的,在线的,并且也允许导入/导出格式正确的CSV和TSV
MacK 2016年

21

我们需要执行以下命令:

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'

3

检查文件末尾是否有空行,否则在某些版本的mongoimport上将忽略最后一行


3

我在mongoimport外壳上使用它

mongoimport --db db_name --collection collection_name --type csv --file C:\\Your_file_path\target_file.csv --headerline

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

您可以阅读有关官方文档的更多信息。


1

罗伯特·斯图尔特(Robert Stewart)已回答如何使用mongoimport进行进口。

我建议使用3T MongoChef工具(3.2及更高版本)优雅地导入CSV的简便方法。将来可能会帮助某人。

  1. 您只需要选择收藏
  2. 选择要导入的文件
  3. 您也可以取消选择要导入的数据。也有很多选择。
  4. 集合已导入

了解如何导入视频


1

首先,您应该退出mongoshell,然后执行以下mongoimport命令:

Manojs-MacBook-Air:bin Aditya$ mongoimport -d marketdata -c minibars 
--type csv 
--headerline
--file '/Users/Aditya/Downloads/mstf.csv'

2017-05-13T20:00:41.989+0800    connected to: localhost
2017-05-13T20:00:44.123+0800    imported 97609 documents
Manojs-MacBook-Air:bin Aditya$

$ mongoimport -d marketdata -c迷你吧--type csv --headerline --file'/Users/Aditya/Downloads
mstf.csv'Manoj Barik

1

罗伯特·斯图尔特的答案很棒。

我想补充一点,您也可以使用--columHaveTypes和--fields键入字段,如下所示:

mongoimport -d myDb -c myCollection --type csv --file myCsv.csv 
  --columnsHaveTypes --fields "label.string(),code.string(),aBoolean.boolean()"

(注意字段之间的逗号后不能有空格)

对于其他类型,请参见此处的文档:https : //docs.mongodb.com/manual/reference/program/mongoimport/#cmdoption-mongoimport-columnshavetypes


1

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

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

3天后,我终于独自完成了任务。感谢所有支持我的用户。


有错字,-headerline,
Ankit Kumar,

1

当我尝试导入CSV文件时,出现错误。我做了什么。首先,我以大写字母更改了标题行的列名称,并删除了“-”,并在需要时添加了“ _”。然后在下面的命令中输入用于将CSV导入mongo

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

在此处输入图片说明


像魅力一样工作!上述答案是针对我认为较旧的MongoDB版本的。
拉加夫·沙玛

0

C:\ wamp \ mongodb \ bin> mongoexport --db proj_mmm-集合产品--csv --fieldFile offers_fields.txt --outoffings.csv


0

只需在执行mongoimport之后使用它

它将返回导入的对象数

use db
db.collectionname.find().count()

将返回对象的数量。


0

用 :

mongoimport -d 'database_name' -c 'collection_name' --type csv --headerline --file filepath/file_name.csv

0

mongoimport -d测试-c测试--type csv --file SampleCSVFile_119kb.csv --headerline

检查收集数据:-

var collections = db.getCollectionNames();

for(var i = 0; i< collections.length; i++)
{    
   print('Collection: ' + collections[i]);
   // print the name of each collection
   
   db.getCollection(collections[i]).find().forEach(printjson);
   
   //and then print the json of each of its elements
}


0
1]We can save xsl as .csv file
2] Got to MongoDB bin pathon cmd - > cd D:\Arkay\soft\MongoDB\bin
3] Run below command
> mongoimport.exe -d dbname -c collectionname --type csv --file "D:\Arkay\test.csv" --headerline
4] Verify on Mongo side using below coomand.
>db.collectioname.find().pretty().limit(1)


0

分享给未来的读者:

在我们的例子中,我们需要添加host参数以使其起作用

mongoimport -h mongodb://someMongoDBhostUrl:somePORTrunningMongoDB/someDB -d someDB -c someCollection -u someUserName -p somePassword --file someCSVFile.csv --type csv --headerline --host=127.0.0.1

0

我的要求是将导入.csv (with no headline)到远程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

以下是导入后的屏幕截图:

在此处输入图片说明

其中nameemail.csv文件中的列。


0

给定.csv文件我只有一栏没有标题,下面的命令对我有用:

mongoimport -h <mongodb-host>:<mongodb-port> -u <username> -p <password> -d <mongodb-database-name> -c <collection-name> --file file.csv --fields <field-name> --type csv

其中field-name指.csv文件中列的标题名称


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.