Как использовать mongoimport для импорта CSV - PullRequest
172 голосов
/ 14 января 2011

Попытка импортировать 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() новые документы не отображаются.

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

Ответы [ 18 ]

226 голосов
/ 16 января 2011

Ваш пример работал для меня с 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 }
25 голосов
/ 24 июня 2013

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

13 голосов
/ 26 октября 2015

Нам нужно выполнить следующую команду:

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

-d - имя базы данных

-c - имя коллекции

- строка заголовка При использовании--type csv или --type tsv, в качестве имен полей используется первая строка.В противном случае mongoimport импортирует первую строку как отдельный документ.

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

5 голосов
/ 11 июля 2016

вам, скорее всего, понадобится пройти аутентификацию, если вы работаете в производственной среде. Вы можете использовать что-то подобное для аутентификации в правильной базе данных с соответствующими учетными данными.

mongoimport -d db_name -c collection_name --type csv --file filename.csv --headerline --host hostname:portnumber --authenticationDatabase admin --username 'iamauser' --password 'pwd123'
3 голосов
/ 14 января 2011

Убедитесь, что в конце файла есть пустая строка, в противном случае последняя строка будет игнорироваться в некоторых версиях mongoimport

2 голосов
/ 26 января 2018

Я использую это в оболочке 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 голос
/ 29 января 2016

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

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

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

См. , как импортировать видео

1 голос
/ 13 мая 2017

Сначала вы должны выйти из оболочки 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$
1 голос
/ 18 января 2018

Ответы Роберта Стюарта великолепны.

Я хотел бы добавить, что вы также можете вводить поля с --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 голос
/ 29 июля 2018

Для версии 3.4 используйте следующий синтаксис:

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

Через 3 дня я наконец сделал это самостоятельно. Спасибо всем пользователям, которые поддержали меня.

...