2016-12-08 2 views
15

я получаю следующее сообщение об ошибке (дамп MongoDB 3.2) (восстановление MongoDB 3.4):MongoDB дамп с 3.2, восстановление с 3.4, индекс ошибки сохранения = нуль

Failed: ngivr-dev.ledgerhelpers: error creating indexes for ngivr-dev.ledgerhelpers: **createIndex error:** **The field 'safe' is not valid for an index specification.** Specification: **{ unique: true, name: "ledgerId_1", safe: null, ns: "ngivr-dev.ledgerhelpers", background: true, key: { ledgerId: 1 } }** 

кажется безопасным индекс является недействительным. Но как я могу использовать его с MongoDB 3.4? 3.2 в порядке.

ответ

35

safe=true не является спецификацией индекса.

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

В 3.4, MongoDB добавлена ​​проверка на спецификации индексов:

Ensuring that the specified index options are valid. Previous versions ignored invalid options.

Вот почему у вас есть эта ошибка. Я боюсь, что вам нужно убедиться, что индекс в вашей версии 3.2 не имеет недопустимых индексов, и после этого выполните mongodump.

Как говорится в ответе kz_sergey, вы можете mongorestore использовать --noIndexRestore, который должен работать нормально.

+5

Параметр '--noIndexRestore' вариант следует использовать в' команды mongorestore', а не 'команду mongodump'. – Keith

+1

Вы совершенно правы: я использую mLab для размещения моего mongodb, обновленных версий при необходимости (от 2.x до 3.2), я проигнорировал, что некоторые из моих старых индексов (созданных в 2.x) содержали атрибут ' надежный: null'. Для меня именно эта старая спецификация создала проблему импорта. Воссоздал эти индексы без исправления проблемы. Танки! – Etienne

13

Почему вы восстанавливаете индексы? --noIndexRestore и создать их снова.

2

В духе комментария Aymeric, вы можете использовать эту AWK Однострочник заменить «безопасную» собственность в вашем. файлы metadata.json.

awk -i inplace '{gsub(",\"safe\":null", ""); print}' *.metadata.json

0
find . -type f -name "*.metadata.json" -exec sed -i 's/,"safe":null//g' {} \; 
+2

некоторые объяснения были бы хороши. – tkruse

+1

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

Смежные вопросы