index array arithmetic mongodb mongodump mongorestore

array - mongodb operators



Volcado de MongoDB desde 3.2, restauración con 3.4, índice de error safe=null (4)

¿Por qué restauras los índices? --noIndexRestore y crearlos de nuevo.

Recibo el siguiente error (volcado MongoDB 3.2) (restaurar 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 } }**

Parece que el índice de seguridad es nulo. Pero, ¿cómo puedo usarlo con MongoDB 3.4? 3.2 está bien.


En el espíritu del comentario de Aymeric, puede usar este awk one-liner para reemplazar la propiedad "segura" en sus archivos .metadata.json.

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


safe=true no es una especificación de índice.

En versiones anteriores de MongoDB, inferiores a 3.4, se pueden agregar especificaciones de índices adicionales. Aquellos fueron utilizados por conductores específicos.

En 3.4, mongodb agregó una validación en la especificación de índices:

Asegurarse de que las opciones de índice especificadas son válidas. Las versiones anteriores ignoraron las opciones inválidas.

Por eso tienes este error. Me temo que necesita asegurarse de que el índice en su versión 3.2 no tenga una especificación de índice no válida, y después de eso haga el mongodump.

Como dice kz_sergey en su respuesta, puede realizar una mongorestore utilizando --noIndexRestore , que debería funcionar bien.


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