Как использовать 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 не обеспечил этого символ в конце каждой строки.

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

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

d.danailov
источник
6

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

mongoimport -d db_name -c collection_name --type csv --file filename.csv --headerline --host hostname:portnumber --authenticationDatabase admin --username 'iamauser' --password 'pwd123'
blueskin
источник
3

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

Maxence
источник
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$
user8006819
источник
$ 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

Bhaskar
источник
0

Просто используйте это после выполнения mongoimport

Он вернет количество импортированных объектов

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

вернет количество объектов.

HarishThangavel
источник
0

использовать:

mongoimport -d 'database_name' -c 'collection_name' --type csv --headerline --file filepath/file_name.csv
Tavleen
источник
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
}

arnav
источник
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
Zameer
источник
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

Гунит Сингх
источник