Как использовать mongoimport для импорта CSV


190

Попытка импортировать 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

Трассировка говорит imported 1 objects, но запуск оболочки Mongo и запуск db.things.find()не показывает никаких новых документов.

Чего мне не хватает?


1
ты пробовал use mydbраньше db.things.find()?
Кайл Уайлд

1
Да - все еще показывает другой документ, который был в db.things
Джо

для импорта CSV в коллекцию вложенных документов (с вложенными документами или массивами) вы можете использовать AWK - joyofdata.de/blog/import-csv-into-mongodb-with-awk-json
Raffael

Ответы:


244

Ваш пример работал для меня с 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, поэтому предположил, что в конце каждой строки была проблема с переводом строки.
Джо

У меня тоже сработало. Я сохранил файл с окончанием строки LF на OS X, и это сработало.
Хаш

Можно ли импортировать все записи из CSV только в 1 объект вместо 1 объекта на запись?
Аникет Капсе

Да, держитесь подальше от Word при выполнении CSV. Я была такая же проблема. Ошибки в Word и в mongoimport тоже :(
Мэтт Флетчер

2
Чтобы иметь возможность аутентификации при импорте, вы можете сделать этоmongoimport -d db_name -c collection_name --type csv --file filename.csv --headerline --host hostname:portnumber --authenticationDatabase admin --username 'iamauser' --password 'pwd123'
blueskin

29

Я был озадачен подобной проблемой, когда mongoimport не выдал мне ошибку, но сообщил об импорте 0 записей. Я сохранил свой файл, который не работал, используя версию OSX Excel для Mac 2011, используя стандартное «Сохранить как ...» «xls as csv», не указав формат «Windows Comma Separated (.csv)». После изучения этого сайта и попытки «Сохранить как снова с помощью« Windows Comma Separated (.csv) »формат, mongoimport работал нормально. Я думаю, что mongoimport ожидает символ новой строки в каждой строке, и экспорт по умолчанию в Mac Excel 2011 csv не обеспечил этого символ в конце каждой строки.


Excel действительно странный зверь при обработке файлов CSV, который также включает в себя попытку импортировать файлы CSV в другие базы данных, это не является строго проблемой, связанной с Монго. Я бы посоветовал использовать Google Sheets при игре с CSV, это бесплатно, онлайн и позволяет импортировать / экспортировать правильно отформатированные CSV и TSV
MacK

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 импортирует первую строку как отдельный документ.

Для получения дополнительной информации: Монгоимпорт


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

Роберт Стюарт уже ответил за то, как импортировать с mongoimport.

Я предлагаю простой способ элегантного импорта CSV с 3T MongoChef Tool (версия 3.2+ ). Может помочь кому-то в будущем.

  1. Вам просто нужно выбрать коллекцию
  2. Выберите файл для импорта
  3. Вы также можете отменить выбор данных для импорта. Также есть много вариантов.
  4. Коллекция импортирована

Посмотрите, как импортировать видео


1

Сначала вы должны выйти из mongoоболочки, а затем выполнить 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,
Анкит Кумар

1

Когда я пытался импортировать файл CSV, я получал ошибку. Что я наделал. Сначала я изменил имена столбцов в строке заголовка заглавными буквами, удалил «-» и добавил «_», если это необходимо. Затем введите команду ниже для импорта CSV в Монго

$ 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 offerings_fields.txt --out offerings.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 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
}


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

Странно никто не упомянул --uriфлаг

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

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

Ниже приведен скриншот того, как это выглядит после импорта:

введите описание изображения здесь

где nameи emailстолбцы в .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файле.


0

Обязательно скопируйте файл .csv в / usr / local / bin или в любую папку, в которой находится ваш mondodb

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.