Импорт даты-типа с использованием mongoimport - PullRequest
11 голосов
/ 25 июня 2011

У меня много ГБ данных, хранящихся в базе данных PostgreSQL, и мне нужно, чтобы они были импортированы в MongoDB. Я сделал это с помощью экспорта CSV и mongoimport.

В этом CSV есть столбцы, подобные этому '2011-06-25', и он был импортирован как строка, а не как MongoDate, поэтому я не могу эффективно выполнять поиск по дате.

Я нашел это: http://www.mongodb.org/display/DOCS/Import+Export+Tools#ImportExportTools-Example%3AImportingInterestingTypes но пример говорит, мне нужно использовать структуру JSON для файла. Мне действительно нужно экспортировать файл JSON из PostgreSQL?

Если я это сделаю - как?

Если я не знаю, как экспортировать "MongoDate" через CSV?

Ответы [ 4 ]

19 голосов
/ 14 февраля 2013

На самом деле первый вариант довольно быстрый, даже с огромными данными.Вот пример запроса с использованием консоли Монго:

/usr/bin/mongo yourdbname --eval "db.yourcollectionname.find().forEach(function(doc){doc.yourdatefield = new ISODate(doc.yourdatefield);db.yourcollectionname.save(doc)});"
9 голосов
/ 25 июня 2011

Ваши варианты:

  • импортировать материал как CSV и преобразовать данные после импорта в Date () (используя консоль mongo или скрипт, написанный на вашем любимом языке)

  • импортировать ваши данные в формате JSON и использовать дескриптор $ date для преобразования строк даты в экземпляры Date

2 голосов
/ 25 июня 2011

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

Как правило, вы обнаружите, что отображение данных не совпадает при преобразовании табличных данных в базу данных документов.

Если вы пишете сценарий, вы также можете поддерживать запуск нескольких копий (или потоков) для повышения скорости импорта.

1 голос
/ 11 апреля 2018

Когда это возможно, повторный импорт из исходного CSV должен быть быстрее.Для относительно большого набора данных (130M объектов, исходный CSV ~ 6 ГБ) прогон mongoimport занял 40 минут, но forEach, предложенный @webDEVILopers, занял 24 часа + (в этот момент я отменил его).

Чтобы импортировать из CSV и конвертировать вашу дату, я запустил

mongoimport --db your-db-name --type csv --file your-file.csv --collection your-collection --fields timestamp.date\(2006-01-02\ 15:04:0
5.00000+00\),count.int32\(\), --columnsHaveType

Часть .date() сложная, у вас есть , чтобы указать эту конкретную дату в вашем источникеформат.Поэтому мои временные метки были похожи на «2018-02-03 12: 09: 23.00000 + 00», что означало форматирование контрольной даты (2 января 2006 г. 15:04:05) в этом формате (как в приведенной выше команде).См. this для справки.

...