Importing JSON into a MongoDB collection
Use the mongoimport utility to import data into a MongoDB database.
MongoDB provides the mongoimport
utility that can be used to import JSON, CSV, or TSV files into a MongoDB database.
mongoimport
is located in the bin directory (eg, /mongodb/bin or wherever you installed it).
To import data, open a new Terminal/Command Prompt window and enter mongoimport
followed by parameters such as database name, collection name, source file name, etc.
If you find that you can’t run mongoimport, be sure that you’ve either exited the mongo utility, or opened a new Terminal/Command Prompt window before running mongoexport, as it is a separate utility.
Import JSON File
Here’s an example of running mongoimport
to import a JSON file.
We’ll import a collection called movies into our database.
mongoimport --db music --file /data/dump/movies.json
Resulting message:
2016-07-12T13:34:04.904+0700 no collection specified 2016-07-12T13:34:04.905+0700 using filename 'movies' as collection 2016-07-12T13:34:04.911+0700 connected to: localhost 2016-07-12T13:34:04.968+0700 imported 213 documents
If you don’t specify a collection name, a collection is created based on the name of the file (minus any extension).
Now, let’s switch back to our mongo Terminal/Command Prompt window and retrieve the list of collections in our database:
show collections
Result:
movies tvshows documentaries
Now we’ll query our revived collection.
db.artists.find()
Result:
{ "_id" : 1, "artistname" : "AC/DC" } { "_id" : ObjectId("5781d7f248ef8c6b3ffb014d"), "artistname" : "The Kooks" } { "_id" : ObjectId("5780fbf948ef8c6b3ffb0149"), "artistname" : "The Tea Party" } { "_id" : ObjectId("5781d7f248ef8c6b3ffb014f"), "artistname" : "Gang of Four" } { "_id" : ObjectId("5781d7f248ef8c6b3ffb014e"), "artistname" : "Bastille" } { "_id" : ObjectId("5781c9ac48ef8c6b3ffb014a"), "artistname" : "Jorn Lande" } { "_id" : ObjectId("5781f85d48ef8c6b3ffb0150"), "artistname" : "Deep Purple", "albums" : [ { "album" : "Machine Head", "year" : 1972, "genre" : "Rock" }, { "album" : "Stormbringer", "year" : 1974, "genre" : "Rock" } ] } { "_id" : ObjectId("578214f048ef8c6b3ffb0159"), "artistname" : "Miles Davis", "albums" : [ { "album" : "Kind of Blue", "year" : 1959, "genre" : "Jazz" }, { "album" : "Bitches Brew", "year" : 1970, "genre" : "Jazz" } ] } { "_id" : ObjectId("578217c248ef8c6b3ffb015a"), "artistname" : "Robben Ford", "albums" : [ { "album" : "Bringing it Back Home", "year" : 2013, "genre" : "Blues" }, { "album" : "Talk to Your Daughter", "year" : 1988, "genre" : "Blues" } ] } { "_id" : 2, "artistname" : "Prince", "address" : { "street" : "Audubon Road", "city" : "Chanhassen", "state" : "Minnesota", "country" : "United States" } } { "_id" : 4, "artistname" : "Rush" } { "_id" : 3, "artistname" : "Moby", "albums" : [ { "album" : "Play", "year" : 1999, "genre" : "Electronica" }, { "album" : "Long Ambients 1: Calm. Sleep.", "year" : 2016, "genre" : "Ambient" } ] } { "_id" : ObjectId("578217c248ef8c6b3ffb015b"), "artistname" : "Snoop Dogg", "albums" : [ { "album" : "Tha Doggfather", "year" : 1996, "genre" : "Rap" }, { "album" : "Reincarnated", "year" : 2013, "genre" : "Reggae" } ] }
Import CSV File
You can import a CSV file by using --type csv
.
If the CSV file has a header row, use --headerline
to tell mongoimport to use the first line to determine the name of the fields in the resulting document.
If the CSV file doesn’t have a header row, use the --fields
parameter to set the field names.
With Header Row
Here’s an example of importing a document with a header row.
The contents of the CSV file:
_id,albumname,artistname 1,Killers,"Iron Maiden" 2,Powerslave,"Iron Maiden" 12,"Somewhere in Time","Iron Maiden" 3,"Surfing with the Alien","Joe Satriani" 10,"Flying in a Blue Dream","Joe Satriani" 11,"Black Swans and Wormhole Wizards","Joe Satriani" 6,"Out of the Loop","Mr Percival" 7,"Suck on This",Primus 8,"Pork Soda",Primus 9,"Sailing the Seas of Cheese",Primus
Import the file:
mongoimport --db music --collection catalog --type csv --headerline --file /data/dump/music/catalog.csv
Query the collection:
> db.catalog.find() { "_id" : 2, "albumname" : "Powerslave", "artistname" : "Iron Maiden" } { "_id" : 1, "albumname" : "Killers", "artistname" : "Iron Maiden" } { "_id" : 3, "albumname" : "Surfing with the Alien", "artistname" : "Joe Satriani" } { "_id" : 12, "albumname" : "Somewhere in Time", "artistname" : "Iron Maiden" } { "_id" : 10, "albumname" : "Flying in a Blue Dream", "artistname" : "Joe Satriani" } { "_id" : 6, "albumname" : "Out of the Loop", "artistname" : "Mr Percival" } { "_id" : 7, "albumname" : "Suck on This", "artistname" : "Primus" } { "_id" : 8, "albumname" : "Pork Soda", "artistname" : "Primus" } { "_id" : 11, "albumname" : "Black Swans and Wormhole Wizards", "artistname" : "Joe Satriani" } { "_id" : 9, "albumname" : "Sailing the Seas of Cheese", "artistname" : "Primus" }
Without Header Row
Here’s another CSV file, but this one doesn’t have a header row:
Mutt Lange, 1948 John Petrucci, 1967 DJ Shadow, 1972 George Clinton, 1941
Now we’ll import it and specify the field names to use:
mongoimport --db music --collection producers --type csv --fields name,born --file /data/dump/music/producers.csv
Query the collection:
> db.producers.find() { "_id" : 1, "name" : "Bob Rock" } { "_id" : ObjectId("5784a3a5dfad478c015f6b72"), "name" : "John Petrucci", "born" : 1967 } { "_id" : ObjectId("5784a3a5dfad478c015f6b73"), "name" : "Mutt Lange", "born" : 1948 } { "_id" : ObjectId("5784a3a5dfad478c015f6b74"), "name" : "George Clinton", "born" : 1941 } { "_id" : ObjectId("5784a3a5dfad478c015f6b75"), "name" : "DJ Shadow", "born" : 1972 }
You’ll see that the ObjectId field has been automatically created and populated for us.
Also, we already had one document in this collection before we ran the import: { “_id” : 1, “name” : “Bob Rock” }. Therefore, you can see that the import has simply added to the collection (as opposed to replacing it and all its contents).
You can use the same method to import TSV files. Simply use --type tsv
.
1 Comment »