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' {} \;