如何使用mongoimport导入csv

时间:2011-01-13 23:27:49

标签: database mongodb csv import mongoimport

尝试导入包含联系信息的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()并不会显示任何新文档。

我错过了什么?

23 个答案:

答案 0 :(得分:224)

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

答案 1 :(得分:25)

我对一个类似的问题感到困惑,其中mongoimport没有给我一个错误,但会报告导入0条记录。我保存了使用OSX Excel for Mac 2011版本使用默认"另存为..." " xls as csv"没有指定" Windows逗号分隔(.csv)"具体格式。在研究了这个网站并尝试再次使用" Windows逗号分隔(.csv)"格式,mongoimport工作正常。我认为mongoimport期望每行都有换行符,默认的Mac Excel 2011 csv导出在每行的末尾都没有提供该字符。

答案 2 :(得分:11)

我们需要执行以下命令:

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

答案 3 :(得分:5)

you will most likely need to authenticate if you're working in production sort of environments. You can use something like this to authenticate against the correct database with appropriate credentials.

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

答案 4 :(得分:3)

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

答案 5 :(得分:2)

我在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

您可以在offical doc上阅读更多内容。

答案 6 :(得分:1)

Robert Stewart的答案很棒。

我想补充一点,你也可以用--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

答案 7 :(得分:1)

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

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

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

答案 8 :(得分:1)

首先,您应该从mongo shell中退出,然后像这样执行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$

答案 9 :(得分:1)

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

我建议使用3T MongoChef工具(3.2+版本)轻松导入CSV。将来可能会帮助别人。

  1. 您只需要选择集合
  2. 选择要导入的文件
  3. 您还可以取消选择要导入的数据。还有很多选择。
  4. 导入集合
  5. 请参阅how to import video

答案 10 :(得分:0)

使用:

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

答案 11 :(得分:0)

mongoimport -d test -c test --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
}

答案 12 :(得分:0)

C:\ wamp \ mongodb \ bin&gt; mongoexport --db proj_mmm --collections offering --csv --fieldFile offering_fields.txt --out offering.csv

答案 13 :(得分:0)

LSeconds

答案 14 :(得分:0)

执行mongoimport后只需使用它

它将返回导入的对象数

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

将返回对象数。

答案 15 :(得分:0)

奇怪的是没有人提到--uri标志:

mongoimport --uri connectionString -c questions --type csv --file questions.csv --headerline 

答案 16 :(得分: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

答案 17 :(得分: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

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

enter image description here

其中nameemail.csv文件中的列。

答案 18 :(得分: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文件中列的标题名称

答案 19 :(得分:0)

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

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

enter image description here

答案 20 :(得分:0)

确保将.csv文件复制到/ usr / local / bin或mondodb所在的任何文件夹中

答案 21 :(得分:0)

以上所有这些答案都很棒。以及运行全功能应用程序的方式。

但是如果您想要快速原型,想要灵活性,因为集合仍然在变化以及最小化您的早期代码库,有一个更简单的方法没有太多讨论。

你现在基本上可以放弃 mongoimport。如果在这里提到这个问题,我本可以节省 3 个小时。所以让我分享给其他人:

Mongodb 有一个名为 Mongo Compass 的 GUI,只需点击一下即可开箱即用地提供 csv 和 json 导入功能。它是 Mongo 生态系统的正式组成部分。在撰写本文时,它是免费的,并且非常适合我的用例。 https://www.mongodb.com/products/compass

  1. 您只需按照简单的安装步骤即可在您的机器上运行 MongoDB 指南针。直接在 GUI 中用于数据库连接和身份验证的几个字段。
  2. 导入 csv/json 文件。在用户(我)验证之前,解析 30KB 文件的时间不到一秒钟。
  3. 验证每个属性的“类型”。很棒的功能,我可以直接提到布尔值、整数等属性类型。根据我的经验,它们似乎都默认为字符串。您可以在导入前更新。日期更挑剔,需要在编码方面特别注意。
  4. 进一步单击 csv 即可在本地或云端的 mongo 数据库中收集一个集合。瞧!

答案 22 :(得分:0)

如果您有多个文件并且想使用 python 导入所有文件,您可以执行以下操作。

import os
import subprocess

# directory of files
dir_files = 'C:\data'
# create list of all files
_, _, fns = next(os.walk(dir_files))
files = [os.path.join(dir_files, fn) for fn in fns]
# mongotool address
mongotool = r'C:\Program Files\MongoDB\Server\4.4\bin\mongoimport.exe'
# name of mongodb database
mydatabase = 'mydatabase'
# name of mongodb collection
mycollection = 'mycollection'
# import all files to mongodb
for fl in files:
    commands =[mongotool, '--db', mydatabase,
               '--collection', mycollection,
               '--file', fl,
               '--type', 'tsv',
               '--headerline']
    subprocess.Popen(commands, shell=True)