MongoDB дамп от 3.2, восстановление с 3.4, индекс ошибки save = null
Я получаю следующую ошибку (сброс MongoDB 3.2) (восстановление MongoDB 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 хорошо.
Ответы
Ответ 1
safe=true
не является спецификацией индекса.
В предыдущих версиях MongoDB, ниже 3.4, дополнительные спецификации индексов могут быть добавлены. Они использовались конкретными драйверами.
В 3.4 mongodb добавила проверку на спецификацию индексов:
Убедитесь, что указанные параметры индекса действительны. предыдущий версии игнорировали недопустимые параметры.
Вот почему у вас есть эта ошибка.
Я боюсь, что вам нужно убедиться, что индекс в вашей версии 3.2 не имеет недопустимых индексов, и после этого выполните mongodump.
Как говорит kz_sergey в своем ответе, вы можете mongorestore
использовать --noIndexRestore
, который должен работать нормально.
Ответ 2
Почему вы восстанавливаете индексы? --noIndexRestore и создать их снова.
Ответ 3
В духе комментария Aymeric вы можете использовать этот однострочный awk для замены "безопасного" свойства в ваших файлах .metadata.json.
awk -i inplace '{gsub(",\"safe\":null", ""); print}' *.metadata.json
Ответ 4
Я создал script, который позволяет вам дезинфицировать ваши сброшенные файлы перед их восстановлением: fooobar.com/questions/35126/...
Ответ 5
find . -type f -name "*.metadata.json" -exec sed -i 's/,"safe":null//g' {} \;