Как использовать 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+). Может помочь кому-то в будущем.
- Вам просто нужно выбрать коллекцию
- Выберите файл для импорта
- Вы также можете отменить выбор данных для импорта. Также есть много вариантов.
- Коллекция импортирована
Посмотрите, как импортировать видео
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
- Вы просто запускаете компас MongoDB на своем компьютере, выполнив простую установку. Пара полей для подключения к БД и аутентификации прямо в графическом интерфейсе.
- Импортируйте файл csv / json. На анализ файла размером 30 КБ потребовалось менее секунды, прежде чем пользователь (я) проверит его.
- Проверьте "тип" каждого свойства. Отличная функция, я мог бы прямо упомянуть типы свойств, такие как логические, целые числа и т. Д. По моему опыту, все они кажутся строковыми по умолчанию. Вы можете обновить перед импортом. Даты были более привередливыми и требовали особого внимания при написании кода.
- Еще одним щелчком мыши - 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
}