How to use mongoimport to import CSV files?
Asked Answered
V

23

210

CSV file with contact information:

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

Running this doesn't add documents to the database:

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

Trace says imported 1 objects, but in the MongoDB shell running db.things.find() doesn't show any new documents.

What am I missing?

Vanettavang answered 13/1, 2011 at 23:27 Comment(1)
for importing a CSV into a collection of nested documents (with sub-documents or arrays) you can use AWK - joyofdata.de/blog/import-csv-into-mongodb-with-awk-jsonAgoraphobia
D
267

Your example worked for me with MongoDB 1.6.3 and 1.7.3. Example below was for 1.7.3. Are you using an older version of 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 }
Dina answered 16/1, 2011 at 7:57 Comment(1)
To be able to authenticate while importing you can do mongoimport -d db_name -c collection_name --type csv --file filename.csv --headerline --host hostname:portnumber --authenticationDatabase admin --username 'iamauser' --password 'pwd123'Shelba
J
30

I was perplexed with a similar problem where mongoimport did not give me an error but would report importing 0 records. I had saved my file that didn't work using the OSX Excel for Mac 2011 version using the default "Save as.." "xls as csv" without specifying "Windows Comma Separated(.csv)" format specifically. After researching this site and trying the "Save As again using "Windows Comma Separated (.csv)" format, mongoimport worked fine. I think mongoimport expects a newline character on each line and the default Mac Excel 2011 csv export didn't provide that character at the end of each line.

Jecon answered 23/6, 2013 at 22:20 Comment(1)
Excel is indeed a weird beast when processing CSV files, that also includes trying to import CSVs on other databases, it is not strictly a problem related with mongo. I would suggest to use Google Sheets when playing around with CSVs, it's free, online and allows to import/export properly formatted CSVs and TSVs tooBaucis
C
26

We need to execute the following command:

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

-d is database name

-c is collection name

--headerline If using --type csv or --type tsv, uses the first line as field names. Otherwise, mongoimport will import the first line as a distinct document.

For more information: mongoimport

Cultivar answered 26/10, 2015 at 16:56 Comment(0)
S
6

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'
Shelba answered 11/7, 2016 at 19:20 Comment(0)
N
4

I use this on mongoimport shell

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

type can choose csv/tsv/json But only csv/tsv can use --headerline

You can read more on the offical doc.

Nicks answered 26/1, 2018 at 2:31 Comment(0)
A
3

Check that you have a blank line at the end of the file, otherwise the last line will be ignored on some versions of mongoimport

Aceae answered 14/1, 2011 at 6:59 Comment(0)
D
3

When I was trying to import the CSV file, I was getting an error. What I have done. First I changed the header line's column names in Capital letter and removed "-" and added "_" if needed. Then Typed below command for importing CSV into mongo

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

enter image description here

Dowski answered 14/10, 2019 at 1:12 Comment(0)
V
1

Robert Stewart have already answered for how to import with mongoimport.

I am suggesting easy way to import CSV elegantly with 3T MongoChef Tool (3.2+ version). Might help someone in future.

  1. You just need to select collection
  2. Select file to import
  3. You can also unselect data which is going to import. Also many options are there.
  4. Collection imported

See how to import video

Vaughn answered 29/1, 2016 at 7:57 Comment(0)
N
1

First you should come out of the mongo shell and then execute the mongoimport command like this:

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$
Nambypamby answered 13/5, 2017 at 12:2 Comment(1)
$ mongoimport -d marketdata -c minibars --type csv --headerline --file '/Users/Aditya/Downloads/mstf.csv' Gurantaed Result experienced by Manoj BarikNambypamby
D
1

Robert Stewart's answers is great.

I'd like to add that you also can type your fields with --columHaveTypes and --fields like this :

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

(Careful to not have any space after the comma between your fields)

For other types, see doc here : https://docs.mongodb.com/manual/reference/program/mongoimport/#cmdoption-mongoimport-columnshavetypes

Drown answered 18/1, 2018 at 11:18 Comment(0)
T
1

For the 3.4 version, please use the following syntax:

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

After 3 days, I finally made it on my own. Thanks to all the users who supported me.

Traylor answered 29/7, 2018 at 0:13 Comment(0)
D
1

My requirement was to import the .csv (with no headline) to remote MongoDB instance. For mongoimport v3.0.7below command worked for me:

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

For example:

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

Below is the screenshot of how it looks like after import:

enter image description here

where name and email are the columns in the .csv file.

Demonology answered 25/5, 2019 at 12:45 Comment(0)
D
1

Given .csv file I have which has only one column with no Header, below command worked for me:

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

where field-name refers to the Header name of the column in .csv file.

Demonology answered 19/8, 2019 at 16:47 Comment(0)
C
0

Just use this after executing mongoimport

It will return number of objects imported

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

will return the number of objects.

Chunk answered 10/11, 2011 at 11:24 Comment(0)
K
0

C:\wamp\mongodb\bin>mongoexport --db proj_mmm --collection offerings --csv --fieldFile offerings_fields.txt --out offerings.csv

Kilimanjaro answered 19/6, 2014 at 6:31 Comment(0)
O
0

use :

mongoimport -d 'database_name' -c 'collection_name' --type csv --headerline --file filepath/file_name.csv
Otisotitis answered 6/4, 2016 at 14:23 Comment(0)
S
0

mongoimport -d test -c test --type csv --file SampleCSVFile_119kb.csv --headerline

check collection data:-

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
}
Sobriquet answered 19/11, 2017 at 16:35 Comment(0)
R
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)
Riorsson answered 16/5, 2018 at 14:2 Comment(0)
G
0

Strangely no one mentioned --uri flag:

mongoimport --uri connectionString -c questions --type csv --file questions.csv --headerline 
Gallard answered 22/8, 2018 at 5:23 Comment(0)
P
0

Sharing for future readers:

In our case, we needed to add the host parameter to make it work

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
Petrochemical answered 4/9, 2018 at 7:38 Comment(0)
C
0

Make sure to copy the .csv file to /usr/local/bin or whatever folder your mondodb is in

Coir answered 18/10, 2019 at 0:57 Comment(0)
G
0

All these answers above are great. And the way to go on a full featured application.

But if you want to prototype fast, want flexibility as the collection still changes as well as to minimize your early code base, there is a much simpler way that is not much discussed.

You can basically forego mongoimport by now. I could have saved 3 hours if it was mentioned here on this question. So let me share for others:

Mongodb has a GUI called Mongo Compass has both csv and json import features out of the box in a matter of clicks. It is an official part of the Mongo ecosytem. At the time of writing it is free and it works very well for my use case. https://www.mongodb.com/products/compass

  1. You simply get MongoDB compass running on your machine by following the simple installation. A couple of fields for DB connection and authentication directly in the GUI.
  2. Import the csv/json file. It took less than a second on a 30KB file to be parsed before user (me) validates.
  3. Validate the "type" of each property. Great feature, I could directly mention the property types such as booleans, integers, etc. In my experience, they seem all default to string. You can update before importing. Dates were more finicky and needed special attention on the coding side.
  4. One click further the csv is a collection in your mongo db local or on the cloud. Voila!
Guardant answered 26/2, 2021 at 8:48 Comment(0)
M
0

If you have multiple files and you want to import all of them using python, you can do the following.

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)

Midiron answered 12/4, 2021 at 3:11 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.