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

Попытка импортировать 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, но стреляет монго и работает db.things.find() не показывает никаких новых документов.

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

23 ответа

Решение

Ваш пример работал для меня с 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 }

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

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

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

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

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

mongoimport -d db_name -c collection_name --type csv --file filename.csv --headerline --host hostname:portnumber --authenticationDatabase admin --username 'iamauser' --password 'pwd123'

Я использую это на оболочке 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

Вы можете прочитать больше на официальном документе.

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

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

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

Сначала вы должны выйти из 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$

Данный .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

где имя-поля относится к имени заголовка столбца в.csv файл.

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

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

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

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

My requirement was to import the .csv (with no headline) к удаленному MongoDB пример. За mongoimport v3.0.7 below 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

Например:

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:

где name а также email are the columns in the .csv файл.

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

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

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

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

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

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

Все вышеперечисленные ответы великолепны. И путь к полнофункциональному приложению.

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

Вы уже можете отказаться от монгоимпорта. Я мог бы сэкономить 3 часа, если бы это было упомянуто здесь по этому вопросу. Итак, позвольте мне поделиться с другими:

У Mongodb есть графический интерфейс под названием Mongo Compass, который имеет функции импорта csv и json прямо из коробки за несколько кликов. Это официальная часть экосистемы Mongo. На момент написания это бесплатно и очень хорошо работает для моего варианта использования. https://www.mongodb.com/products/compass

  1. Вы просто запускаете компас MongoDB на своем компьютере, выполнив простую установку. Пара полей для подключения к БД и аутентификации прямо в графическом интерфейсе.
  2. Импортируйте файл csv / json. На анализ файла размером 30 КБ потребовалось менее секунды, прежде чем пользователь (я) проверит его.
  3. Проверьте "тип" каждого свойства. Отличная функция, я мог бы прямо упомянуть типы свойств, такие как логические, целые числа и т. Д. По моему опыту, все они кажутся строковыми по умолчанию. Вы можете обновить перед импортом. Даты были более привередливыми и требовали особого внимания при написании кода.
  4. Еще одним щелчком мыши - csv - это коллекция в вашей локальной базе данных mongo или в облаке . Вуаля!

Если у вас несколько файлов и вы хотите импортировать их все с помощью Python, вы можете сделать следующее.

      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)

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

mongoimport --uri connectionString -c questions --type csv --file questions.csv --headerline 
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)

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

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

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

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

Поделиться для будущих читателей:

В нашем случае нам нужно было добавить 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

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

mongoimport -d 'database_name' -c 'collection_name' --type csv --headerline --file filepath/file_name.csv

C:\wamp\mongodb\bin>mongoexport --db proj_mmm - коллекция предложений --csv --fieldFile offerings_fields.txt --out offerings.csv

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
}

Другие вопросы по тегам