`поля не могут быть одинаковыми: '' и ''` mongoimport error

Я пытаюсь импортировать csv в mongodb на моем локальном компьютере. Я использовал следующий комманд из оболочки:

mongoimport -d mydb -c things --type csv --file /Users/..../agentsFullOutput.csv --headerline

Я получаю следующую ошибку:

Failed: fields cannot be identical: '' and ''

Я ничего не могу найти по тому, что это значит. Что я делаю не так? Файл csv, кстати, является результатом mongoexport.

здесь находятся заголовки столбцов и некоторые данные:

_id build_profile   company_address company_name    company_website created_at  device _token   downloaded_app  email   first_name  last_name   is_proapp   modified_at mobile_phone    terms_accepted_at   license_number  broker_id   join_unique_url linkedin_profile_id billing_customer_id billing_zip mobile_phone    office_phone    vendors_count   clients_count   app_client
ObjectID(52ab245b763f4aec448b6763)  0   California  Lateral test    2014-01-01T08:19:05.470Z            test    test    test        2015-04-18T05:16:37.155Z    (123) 123-1234                          zip (123) 123-1234      10  5   
ObjectID(52b46bfc763f4ad9198b45ab)      7928    test    test    2014-01-01T08:19:05.470Z                Jennifer    Chase       2015-04-15T17:05:17.114Z            5551112     jennifer-chase      test    7071            22  64  

Ответы

Ответ 1

У меня была такая же проблема. Я открывал CSV файл в Excel, чтобы массировать его и снова сохранять. При попытке импортировать его в Mongo с помощью команды "mongoimport" я получал такое же сообщение об ошибке, что у меня были одинаковые значения. Я проверял заголовки столбцов много раз, чтобы убедиться, что не было одинаковых значений.

В конце концов я попробовал повторно сохранить файл из Excel с помощью опции "Отключить Windows Comma Separated (.csv)" в раскрывающемся меню "Формат" вместо стандартного значения "Comma Separated Values ​​(.csv)", найденного в "Common Format", раздел.

Работал отлично.

Ответ 2

Ошибка: Mongo-tools проверяет, что поля в вашей заголовке уникальны. Это связано с тем, что MongoDB не поддерживает дублированные имена полей в документах.

Из mongo-tools repo:

  // NOTE: this means we will not support imports that have fields like
  // a, a - since this is invalid in MongoDB
  if field == latterField {
    return fmt.Errorf("fields cannot be identical: '%v' and '%v'", field, latterField)
  }

ИЗМЕНИТЬ

Я смог воспроизвести это сообщение об ошибке, создав файл csv с именами повторяющихся полей в заголовке. Кажется, что ваш файл csv имеет имена повторяющихся полей в заголовке '' и ''. Не видя фактического файла, я думаю, что есть что-то вроде: field1,field2,,field3,,field4 в заголовке.

Ответ 3

У меня была аналогичная проблема. Я создал электронную таблицу Excel, и в одном столбце у меня была линеаризованная XML-строка. Кажется, что функция сохранения Excel не справлялась с одной из строк XML и создавала из нее дополнительные поля (столбцы). Естественно, у меня не было заголовков столбцов для этих дополнительных столбцов, поэтому, когда я попытался импортировать MongoDB, я получил эту ошибку.

Я смог исправить это, найдя строку с ошибкой-дочерним XML. Оказывается, что некоторые из пространств были фактически вкладками, а Excel использовал вкладки для разделения строки на несколько ячеек. Как только я заменил вкладки одним пробелом, CSV сохранил правильно, а mongoimport работал.

Ответ 4

Получена идентичная ошибка при использовании mongoimport as mongoimport --db test --collection transactions --type csv --headerline --file ~/test.csv

Ошибка, которую я получил Failed: fields cannot be identical: '100' and '100'

Я экспортировал csv, используя mongoexport. Затем сделали некоторые изменения с помощью Microsoft Excel на Mac и попробовали mongoimport, что привело к ошибке. Я думаю, что сохранение MS Excel в виде csv сделало неожиданные изменения, сделав файл бесполезным для mongoimport.

Затем я экспортировал файл снова, используя mongoexport, и теперь сделал изменения, которые мне нужны, используя редактор Sublime. Mongoimport работает без проблем.

Ответ 5

Пока я читал сообщение Adhil Maujahid в блоге Интерактивная визуализация данных с D3.js, DC.js, Python и MongoDB "Я столкнулся с этой проблемой. Проведя почти час, я изменил команду - заголовок на -f 1,2,3,.... 44 (до тех пор, пока не будет 44" ). Здесь 44 - количество атрибутов в файле. Поэтому, если вы когда-нибудь столкнетесь с этой проблемой, попробуйте работать. Пожалуйста, дайте мне знать логику этого, если вы знаете основную причину.

Ответ 6

Обычно это потому, что у вашего файла нет "\n" (символ новой строки) и имеет "\ r" (возврат каретки). Обычно это происходит, если вы создаете файл с "Mac", а не на последнем * nix или Windows.

* Поэтому, когда MongoDB пытается прочитать CSV, он считывает весь файл как одну строку и бросает ошибку. См. отчет об ошибке *

Решение:

Windows –> NIX: 
tr -d '\r' < windowsfile > nixfile // delete the carriage returns

Mac –> NIX: 
tr '\r' '\n' < macfile > nixfile // translate carriage returns into newlines

NIX –> Mac: 
tr '\n' '\r' < macfile > nixfile // translate newlines into carriage returns

Yet another option is to do this from within vi like so:

:set fileformat = unix 
:w

Кредит: https://danielmiessler.com/study/crlf/#gs.bJ39VzA

Существуют и другие инструменты CLI, такие как dos2Unix и unix2dos и т.д., которые помогут, как показано ниже:

awk '{ sub("\r$", ""); print }' dos.txt > unix.txt


perl -pe 's/\r$//' < dos.txt > unix.txt

Иногда ваш CSV файл может вообще не иметь заголовок!

НТН

Ответ 7

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

введите описание изображения здесь

Ответ 8

Сохранить CSV файл в виде файла с запятой в Windows (CSV). шаги:

  • Откройте файл CSV или Excel.
  • Сохранить как вариант
  • Выберите "Форматировать" (Windows Comma Separated (.csv))
Run Command: ./mongoimport --db betahrprocesses --collection employee --type csv --headerline  --file employee.csv 

введите описание изображения здесь

Ответ 9

Нашел решение здесь - я открыл файл в блокноте ++ и заменил все мои CR (\ r) на LF (\n). Нашел замену - мой импорт снова, и он сработает!

введите описание изображения здесь

Ответ 10

В формате csv каждое поле должно быть разделено запятой. В примере: это вкладки или пробелы?.

Попробуйте файл вроде этого:

_id,build_profile,company_address,company_name,company_website,created_at,device,_token,downloaded_app,email,first_name,last_name,is_proapp,modified_at,mobile_phone,terms_accepted_at,license_number,broker_id,join_unique_url,linkedin_profile_id,billing_customer_id,billing_zip,mobile_phone,office_phone,vendors_count,clients_count,app_client
ObjectID(52ab245b763f4aec448b6763),0,California,Lateral,test,2014-01-01T08:19:05.470Z,,test,test,test,2015-04-18T05:16:37.155Z,(123),123-1234,,,,zip,(123),123-1234,10,5,
ObjectID(52b46bfc763f4ad9198b45ab),7928,test,test,2014-01-01T08:19:05.470Z,,Jennifer,Chase,2015-04-15T17:05:17.114Z,,5551112,jennifer-chase,test,7071,,22,64,