Me sale el siguiente error (volcado de 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 } }**

Se ve como el seguro de índice es nulo. Pero, ¿cómo lo puedo usar con MongoDB 3.4? 3.2 está bien.

4 Comentarios

  1. 57

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

    En versiones anteriores de MongoDB, inferior a 3.4, extra índices de las especificaciones puede ser añadido. Aquellos que fueron utilizados por los controladores específicos.

    En 3.4, mongodb añadido una validación de los índices de especificación:

    Asegurar que el índice especificado las opciones son válidas. Anterior
    versiones omiten opciones no válidas.

    Por eso tiene este error.
    Me temo que usted necesita para asegurarse de que el índice en su versión 3.2 no tiene invalid index specificaitons, y después de que el mongodump.

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

    • El --noIndexRestore opción debe ser utilizada en el mongorestore comando, no la mongodump comando.
    • Tienes toda la razón : yo estoy usando mLab para alojar mi mongodb, versiones actualizadas cuando sea necesario (de 2.x, 3.2), no hice caso de que algunos de mis antiguos índices (creado en el 2.x) se contienen atributo safe: null. Para mí, esta fue la edad de la especificación que creó la importación problema. Recreado estos índices, sin que se solucionó el problema. Los tanques !
    • Yo también tengo un error con el índice de seguro = null al pasar de 3.4 mmapv1 a wiredTiger
  2. 23

    ¿Por qué restaurar los índices? –noIndexRestore y crearlos de nuevo.

    • manualmente desde cero? va a demanda de la parte sólida de tiempo
    • Pero la restauración de la colección sin índices es mucho más rápido. Tal vez mi forma es más rápida, usted puede comprobar esto.
    • por supuesto, es más rápido, pero la aplicación sin índices, no va a funcionar suponiendo db tiene más o menos de tamaño decente. esto es lo que este alboroto es todo acerca de
  3. 3

    En el espíritu de Aymeric comentario, puede utilizar este awk línea para reemplazar el «seguro» de la propiedad en su .los metadatos.json archivos.

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

  4. 1
    find . -type f -name "*.metadata.json" -exec sed -i 's/,"safe":null//g' {} \;
    • algunos explicación sería agradable.
    • Mientras que este código puede responder a la pregunta, proporcionar contexto adicional sobre como y porque en que se resuelve el problema podría mejorar la respuesta del valor a largo plazo.
    • Esto funciona y que mantendrá a sus índices! Lo que hace/significa: buscar todos los archivos en la ubicación actual (.) a continuación, utilizando el mismo proceso (exec) reemplazar en el archivo (sed-i) de acuerdo a la siguiente expresión regular, que es, básicamente diciendo que todas las apariciones de «seguro»:null con nada. Sé que no es la perfecta explicación de la regex!

Dejar respuesta

Please enter your comment!
Please enter your name here