2011-04-21 17 views
17

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?

+3

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. –

+0

Definitivamente hay casos en los que desea migrar datos. – chovy

+0

@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). –

Respuesta

16

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.

6

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.

0

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.

+0

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

3

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.

Cuestiones relacionadas