mongoDB монгоимпорт upsert

Я пытаюсь сделать массовое обновление со следующим

mongoimport -d my_db -c db_collection -upsertFields email ~/Desktop/update_list.csv

CSV, который я пытаюсь импортировать, выглядит так.

email, full_name
[email protected],stackoverflow
[email protected],mongodb

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

exception:Failure parsing JSON string near: abc@sa
[email protected],abc
imported 0 objects
encountered 99398 errors

В чем проблема? Как я должен это делать?


person crayfish    schedule 06.02.2011    source источник


Ответы (3)


В вашей команде mongoimport отсутствует параметр --upsert, который необходим в сочетании с параметром --upsertFields. Пытаться:

mongoimport -d my_db -c db_collection --upsert --upsertFields email ~/Desktop/update_list.csv
person Andy Triggs    schedule 09.11.2011
comment
начиная с версии 3.0.0: --upsertFields теперь подразумевает --upsert. Таким образом, вы можете предпочесть использовать --upsertFields вместо --upsert. docs.mongodb.org/manual/reference/program/mongoimport/ - person 6opko; 05.05.2016

Добавить --type csv

В противном случае предполагается, что ваш ввод - json.

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

person jared    schedule 06.02.2011
comment
я добавил оба аргумента --type csv и --headerline, все они были импортированы, но не обновлены. В итоге у меня есть дубликаты. - person crayfish; 07.02.2011
comment
Mongoimport не может обновлять существующие записи... Он только вставляет новые записи. Вы можете попробовать удалить существующую коллекцию перед запуском импорта (что вы можете сделать с флагом --drop для импорта монго). См. полную документацию здесь: mongodb.org/display/DOCS/Import+Export+Tools - person jared; 07.02.2011
comment
Ну, на самом деле может. Вам просто нужно добавить опцию --upsert (как предложил Энди Триггс) - person Arsen7; 15.01.2014

Я предполагаю, что данные внутри вашего файла CSV должны быть заключены в двойные кавычки.

person Andreas Jung    schedule 06.02.2011
comment
Я пересохранил свой csv, поэтому все мои данные заключены в двойные кавычки. Мне удалось импортировать все это, но они не были обновлены. В итоге у меня есть дубликаты. - person crayfish; 07.02.2011