¿Cuál es la mejor práctica (o herramienta) para actualizar/migrar esquemas de Mongoose a medida que la aplicación evoluciona?Tratamiento de los cambios de esquema en Mongoose
Respuesta
Actualización: a prueba, esto no funciona en su forma actual, es la idea correcta de ir, tengo una sola migración a trabajar con considerables ajustes de la módulo en sí Pero no veo que funcione como está previsto sin algunos cambios importantes y de alguna manera no pierda de vista los diferentes esquemas.
suena como usted quiere mangosta-Data-migraciones
Se pretende migrar versiones de esquema antiguas de los documentos a medida que los utiliza, que es parece ser la mejor manera de manejar las migraciones en MongoDB.
En realidad, no desea ejecutar migraciones de conjunto de datos completos en una colección de documentos (tabla alter) ya que carga mucho sus servidores y podría requerir tiempo de inactividad de la aplicación/servidor. A veces puede necesitar escribir un script que simplemente tome todos los documentos aplicando el nuevo esquema/alteraciones y llamadas guardadas, pero necesita comprender cuándo/dónde hacer eso. Un ejemplo podría ser, agregar lógica de migración a doc init tiene más de un golpe de rendimiento que vale la pena tomar el servidor por 3 horas para ejecutar las secuencias de comandos de migración.
Encontré esto link bastante útil también, básicamente reitera lo anterior con más detalle y esencialmente implementa el concepto del paquete de nodos anterior en php.
N.B. El módulo tiene 5 meses de antigüedad, 0 tenedores, pero miro a mi alrededor y no puedo encontrar nada mejor/más útil que el estilo de respuesta de abdelsaid.
Aunque es divertido, MongoDB nació para responder a los problemas de esquema en RDBMS. No tiene que migrar nada, todo lo que tiene que hacer es establecer el valor predeterminado en la definición del esquema si el campo es obligatorio.
new Schema({
name: { type: string }
})
a:
new Schema({
name: { type: string },
birthplace: { type: string, required: true, default: 'neverborn' }
});
Realmente estoy pensando en herramientas como las migraciones de Rails que te permiten manejar los aspectos de gestión de cambios, pero no creo que realmente haya algo así, así que lo aceptaré. – mahemoff
Sé lo que quiere decir, pero no veo una utilidad para eso en bases de datos basadas en documentos o ¿me equivoco? Si mantiene sus esquemas bajo un control de fuente como Mercurial/Subversion/git, siempre puede volver a las revisiones anteriores. – vimdude
No creo que sea tan diferente a las bases de datos SQL. Puede dividir "nombre" en "nombre" y "apellido" campos por ejemplo ... tendría que ejecutar esa transformación contra la base de datos de cada entorno y rastrear de alguna manera. – mahemoff
Acabo de tener este problema donde necesitaba actualizar mi base de datos para reflejar el cambios a mi esquema Después de algunas investigaciones, decidí probar la función updateMany() en la consola mongo para hacer las actualizaciones y creo que funcionó bastante bien.
Para aplicar esta el ejemplo de vimdude el código sería de la siguiente manera:
try { db.<collection>.updateMany({ birthplace: null }, { $set: {"birthplace": "neverborn" } }); } catch(e) { print(e); }
El updateMany función() actualizará todos los documentos en una colección basada en un filtro. En este caso, el filtro está buscando todos los documentos donde el campo 'lugar de nacimiento' es nulo. Luego establece un nuevo campo en los documentos llamados 'birthplace' y establece su valor en 'neverborn'.
Después de ejecutar el código, modificado para reflejar sus circunstancias Run:
db.<collection>.find().pretty()
para verificar que se hicieron los cambios. El nuevo campo "lugar de nacimiento" con el valor "neverborn" debe aparecer al final de cada documento en su colección.
Espero que ayude.
- 1. ¿Validar múltiples propiedades de esquema de Mongoose?
- 2. Mongoose: Esquema de base de datos sugerido
- 3. ¿Generación de formulario del objeto Esquema Mongoose?
- 4. ¿Cómo administrar eficientemente los cambios de esquema frecuentes usando sqlalchemy?
- 5. Mongoose se duplica con la clave de esquema única
- 6. XML simple: tratamiento de los puntos en los nodos
- 7. Tratamiento de matrices en Ir
- 8. Tratamiento de nombres mongoles
- 9. Búsqueda de objetos incrustados en Mongoose
- 10. ¿Límites en los cambios del esquema de PostgreSQL dentro de las transacciones?
- 11. Tratamiento de los argumentos flexibles en Mathematica funciones
- 12. Detener el tratamiento de los espacios en blanco como ceros
- 13. ¿Por qué Mongoose agrega matrices en blanco?
- 14. Cómo detener EF (código primero) Comprobación de cambios de esquema
- 15. Estructura de archivo de Mongoose & NodeJS Project
- 16. cambios de esquema de mysql con maestro y esclavo
- 17. Conjuntos de datos fuertemente tipados y cambios de esquema
- 18. Mongoose: cómo aprovechar el middleware de esquema en el evento 'init'?
- 19. ¿Cómo puedo poner la marca de tiempo actual en un esquema Mongoose?
- 20. Tratamiento de errores de ASP.NET
- 21. Tratamiento de excepciones en Webforms de ASP.NET
- 22. Tratamiento de dependencias circulares en OCaml
- 23. ¿Mongoose solo admite documentos incrustados en matrices?
- 24. Creación de índices de múltiples campos en Mongoose/MongoDB
- 25. mongoose (mongodb) Alias _id campo
- 26. OPCIONES Tratamiento de la petición en nginx
- 27. Seguimiento de versión, automatizar los cambios al esquema DB con django
- 28. Cómo establecer ObjectId como un tipo de datos en mongoose
- 29. Mongoose alternativa?
- 30. Mongoose: populate()/DBref o duplicación de datos?
Aceptado al menos hasta que surja algo mejor. ¿Puede agregar esa advertencia a su respuesta ya que no todos verán el comentario? – mahemoff
Nota adicional, esto tendrá que hacer esto mañana, se bloqueó por otra cuestión, lo siento. – Louis
Actualizado. Lamentablemente está bastante roto. Déjame saber aquí si alguna vez encuentras algo, tipo de querer una solución adecuada para el método de actualización sobre la marcha. Tengo la sensación de que necesitaría hacer un seguimiento de cada versión para cargar esquemas anteriores y permitir modificaciones como el módulo intenta hacer. Por desgracia, mi conocimiento de la mangosta es bastante deficiente hasta ahora. ¡Llegar allí! – Louis