Lo he estado usando con un nuevo proyecto, pero también es la primera vez que uso MongoDB. Definir un esquema parece innecesario porque pensé que la ventaja de mongo era que no necesitaba esquemas definidos. ¿No puedo simplemente guardar objetos sobre la marcha sin importar el esquema? Entonces, ¿por qué querría? También falta la documentación, por lo que algunas cosas que puedo hacer fácilmente en la concha de mongo son más difíciles de lo que deberían ser.¿Cuál es la razón principal para usar Mongoose ORM?
Respuesta
Lo mejor de Mongoose para MongoDB es que puede tener una validación automática incorporada de los datos que está insertando/actualizando. Mongoose también le da la capacidad de predefinir los eventos que suceden, por ejemplo, antes de que se guarde un documento. Esto es muy poderoso porque consolida el código que debería escribir, y coloca ese código donde debería estar junto a la lógica del documento y no en la lógica de la aplicación.
Consulte middleware y validación para algunos ejemplos. alexyoung/Nodepad en Github tiene algunos buenos ejemplos en el models.js file.
Conocer un esquema definido de antemano puede ser útil, porque entonces puede hacer suposiciones que de otra manera no sería posible. Por ejemplo, si tengo un esquema Post
, entonces puedo suponer que tiene un campo body
y usarlo como String
sin verificar su existencia.
De acuerdo, incluso en mi modelo bien definido, puedo tener el equivalente de un documento sin esquema dentro, por ejemplo.
mongoose.model('Post', new Schema({
body: String,
meta: {}
}));
y luego puedo simplemente agregar datos aleatorios a myPost.meta a capricho. Proporciona un equilibrio muy bueno para mí entre el esquema definido y schemaless.
He usado Mongoose y tengo que decir que estoy totalmente de acuerdo en que la definición de tu Esquema de antemano limita seriamente a MongoDB. La idea detrás de Mongoose era hacerla segura y permitir un mantenimiento fácil, pero en realidad no apela a una base de datos basada en documentos.
Comprobé la mangosta muy cerca de su lanzamiento, y lo que esta publicación y la publicación de la operación señalan es que nunca lee los documentos muy bien. Mongoose siempre ha tenido el tipo de esquema Mixto para campos, lo que permite que todos y cada uno de los datos que quiera guardar estén disponibles ad-hoc. De hecho, si lo desea, puede hacer que su colección se comporte de esa manera, pero obstaculiza seriamente su aplicación. Si necesita verificar si los datos existen todo el tiempo, realmente no tiene ninguna estructura, lo que da como resultado errores, incidencias e inconsistencias en los datos. – Oddman
Realmente puede ir en cualquier dirección. Hay muchos mapeadores populares para MongoDB en muchos otros lenguajes: Morphia para Java, Doctrine para PHP, Mongoid/Mongomapper para Ruby, etc.
Aunque MongoDB es "sin esquema", no es "libre de esquemas". Hay algo que decir acerca de saber qué esperar al salir de DB.
Por supuesto, también hay algo elegante en construir un objeto ad-hoc y guardarlo. En este punto, node.js es muy nuevo y probablemente sea mejor trabajar con las cosas que te gustan.
También falta la documentación, por lo que algunas cosas que puedo hacer fácilmente en la concha de mongo son más difíciles de lo que deberían ser.
Mongoose sigue siendo un proyecto de la comunidad y es relativamente nuevo. Si hay documentos faltantes o es necesario escribirlos, estoy seguro de que el equipo de desarrollo adorará la ayuda. Es probable que pueda conectarse con ellos on the groups.
- 1. ¿Cuál es la razón principal para actualizar a Eclipse Juno?
- 2. ¿Cuál es una buena razón para usar vistas de SQL?
- 3. ANDROID: ¿Cuál es la idea principal detrás de usar strings.xml?
- 4. ¿Cuál es la razón detrás de usar listas UL Li para dibujar barras de navegación?
- 5. ¿Cuál es el propósito del modificador -m?
- 6. ¿Cuál es la razón de ser de SwingWorker?
- 7. Cuál es la razón de var $ this = this
- 8. Usar Matlab para importar otro archivo .m
- 9. ¿Cuál es la mejor clave principal para almacenar las URL
- 10. ¿Cuál es el principal beneficio de usar HashMap en Java?
- 11. ¿Cuál es la razón detrás de usar def y defn en lugar de simplemente definir?
- 12. ¿Cuál es la razón de este error de Valgrind?
- 13. ¿Cuál es la razón detrás de Object.clone() está protegido
- 14. ¿Cuál es la razón detrás de cbegin/cend?
- 15. ¿Alguna razón importante para no usar AJAX?
- 16. ¿Cuál es la razón detrás de la sintaxis elegida para declarar amigos de plantilla?
- 17. ¿Hay alguna razón para usar System.Uri?
- 18. ¿Alguna razón para no usar XmlSerializer?
- 19. ¿Hay alguna razón para usar esto->
- 20. ¿Puedo usar IdUDPClient para enviar la solicitud M-SEARCH?
- 21. ¿Cuál es la diferencia de usar addEventListener?
- 22. La razón para usar role = "list" y role = "listitem"?
- 23. ¿Hay alguna razón para usar tanto la clave principal como la clave única juntas en el mismo campo?
- 24. Cuál es la diferencia principal entre Dictionary y Hashtable
- 25. Usar $ inc para incrementar una propiedad de documento con Mongoose
- 26. ¿Para qué es el lenguaje M?
- 27. ¿Cuál es la forma más fácil de exponer subfunciones de archivos M para pruebas unitarias?
- 28. ¿Cuál es su principal solicitud de funciones para Silverlight?
- 29. ¿Cuál es la razón para tener identificadores sin reserva como macros incorporadas en gcc?
- 30. ¿Cuál es la razón para evaluar un hash en Perl en un contexto escalar?
Al llamar a MongoDB schemaless, realmente se refiere al hecho de que la base de datos en sí misma no requiere ningún esquema ni migraciones de esquema. Eso no significa que sus datos estén siempre desestructurados; en la mayoría de los casos, usted quiere que sus datos estén estructurados, y por naturaleza, generalmente lo es. –
Definitivamente hay casos en los que desea migrar datos. – chovy
@nbro - No hubo valor cero para editar esta pregunta, solo para agregar saltos de línea, * especialmente * ya que 1) tiene 4 años y 2) bajo las pautas de StackOverflow de hoy, esta pregunta ahora está fuera del tema como basada en opinión. Ni siquiera se tomó el tiempo para editar el preámbulo sobre un nuevo proyecto y la primera vez que usaba MongoDB (que es completamente superfluo). –