Acabo de llegar a Node.js y veo que hay muchas librerías para usar con MongoDB, las más populares parecen ser estas dos: (mangosta y mongodb). ¿Puedo obtener pros y contras de esas extensiones? ¿Existen mejores alternativas a estos dos?
Editar: Encontré una nueva biblioteca que también parece interesante node-mongolian y es "Mongolian DeadBeef es un increíble controlador node.js de Mongo DB que intenta aproximarse mucho al shell mongodb". (readme.md)
https://github.com/marcello3d/node-mongolian
Esto es solo para agregar más recursos a las personas nuevas que ven esto, por lo que básicamente mongol es como un ODM ...
javascript
node.js
mongodb
mongoose
norman784
fuente
fuente
Respuestas:
Mongoose es de nivel superior y usa el controlador MongoDB (es una dependencia, verifique el package.json), por lo que lo usará de cualquier manera dadas esas opciones. La pregunta que debería hacerse es: "¿Quiero usar el controlador sin formato o necesito una herramienta de modelado de documentos y objetos?" Si está buscando una herramienta de modelado de objetos (ODM, una contraparte de los ORM del mundo SQL) para omitir algunos trabajos de nivel inferior, desea Mongoose.
Si desea un controlador, porque tiene la intención de romper muchas reglas que un ODM podría hacer cumplir, elija MongoDB. Si desea un controlador rápido y puede vivir con algunas funciones que faltan, pruebe Mongolian DeadBeef: https://github.com/marcello3d/node-mongolian
fuente
La mangosta es, con mucho, la más popular. Yo lo uso y no he usado otros. Así que no puedo hablar de los demás, pero puedo contarte mis quejas con Mongoose.
mongooseInstace.model('MyCollection', { "_id": Number, "xyz": String })
es mejor hacer (aunque el nombre de la colección sea realmenteMyCollection
):mongooseInstace.model('mycollection', { "_id": Number, "xyz": String })
Pero, sinceramente, es realmente útil. El mayor problema es la documentación. Está ahí, pero está seco y es difícil encontrar lo que necesita. Podría utilizar mejores explicaciones y más ejemplos. Pero una vez que superas estas cosas, funciona realmente bien.
fuente
Estoy construyendo una nueva aplicación y diseñando ahora su estructura, aquí hay algunas ideas sobre por qué usar o no la mangosta:
El controlador mongodb es un controlador sin formato, se comunica directamente con mongodb. la mangosta es la capa de abstracción. Obtiene E / S más fácil a la base de datos mientras que su estructura de base de datos es lo suficientemente simple.
La abstracción trae sus requisitos y tienes que seguirlos. Su aplicación será más lenta, consumirá más RAM y será más complicada, pero si sabe cómo usarla, puede escribir objetos simples más rápido y guardarlos en la base de datos.
Sin mangosta, tendrá una aplicación más rápida con conexión directa a mongodb. Nadie dice que no puede escribir sus propios modelos para guardar cosas en db. Usted puede. Y creo que es más fácil. Escribes código, que usarás, sabes lo que necesitas. Tu capa de abstracción será mucho más pequeña que la de la mangosta.
Vengo del mundo PHP, allí teníamos sql sin procesar con funciones mysql_ depreciadas, luego obtuvimos PDO - capa de abstracción orientada a objetos para comunicarnos con sql. O puede elegir un ORM pesado como Doctrine para tener cosas similares a mongoose en mongoDB. Objetos con método setter / getters / save y así sucesivamente. Eso está bien, pero al agregar más abstracción, está agregando más archivos, más lógica, más documentación, más dependencias. Me gusta mantener las cosas simples y tener menos dependencias en mi pila. Por cierto, esa fue la razón por la que pasé de PHP a Javascript servidor-cliente en primer lugar.
Con mangosta, creo que es genial escribir algunas aplicaciones simples, que tienen una estructura de base de datos simple similar a SQL . Cuando empiezas a tener subdocumentos y quieres hacer todas esas consultas locas, me resulta muy difícil con la mangosta. Tienes que mirar los documentos de mongodb, luego mirar los documentos de mongoose para saber cómo hacer la consulta que deseas. A veces encontrará que X future of mongodb no está en mongoose, por lo que baja al controlador mongodb sin procesar y escribe consultas mongodb sin procesar en uno u otro lugar. Sin mangosta, miras los documentos de mongodb y haces tu consulta.
fuente
Solo he usado mongodb. En mi opinión personal, recomendaría comenzar con algo de bajo nivel y luego avanzar. De lo contrario, puede encontrarse utilizando las funciones avanzadas adicionales proporcionadas por controladores de nivel superior como mangosta sin ningún beneficio real.
El problema que he tenido con mongodb, que es endémico de node.js, es la mala documentación. Hay documentación y mucha, pero no siempre es la más útil. Que he visto hasta ahora, no hay ejemplos buenos y completos del uso de producción del controlador. La documentación contiene el mismo ejemplo en plantilla de abrir una conexión, emitir un comando y cerrar la conexión. Puede saber si está copiada y pegada de una plantilla porque cada ejemplo incluye lo necesario para todo lo que podría ser necesario en lugar de solo lo que se necesita para cada ejemplo.
Para dar un ejemplo tomado completamente al azar:
¿Qué hace exactamente "realizar operaciones utilizando búferes bson sin procesar"? No puedo encontrarlo explicado en ninguna parte y una búsqueda en Google de esa frase no ayuda. Quizás podría buscar más en Google, pero no debería tener que hacerlo. La información debería estar ahí. ¿Existe alguna ventaja de rendimiento, estabilidad, integridad, compatibilidad, portabilidad o funcional para habilitar / deshabilitar esta opción? Realmente no tengo idea sin profundizar en el código y si estás en mi barco, eso es un problema grave. Tengo un demonio en el que no se requiere una persistencia perfecta, pero el programa debe ser muy estable en tiempo de ejecución. Podría suponer que esto significa que espera que deserialice y serialice a JSON o es algo de bajo nivel, interno y transparente para el usuario, pero podría estar equivocado. Aunque tiendo a hacer buenas suposiciones, no puedo confiar en suposiciones y conjeturas al hacer sistemas vitales. Así que aquí puedo probar mi afirmación con código o profundizar mucho más en Google o su código. Como único, esto no es tan malo, pero me encuentro en esta situación muchas veces cuando leo su documentación. La diferencia puede significar días dedicados a una tarea frente a horas. Necesito confirmación y la documentación apenas me da una explicación, mucho menos una confirmación.
La documentación se apresura. No explica los eventos, brinda detalles vagos sobre cuándo se producen los errores o la naturaleza de esos errores y, a menudo, hay varias formas de lograr la conectividad que pueden no estar claras. Puedes pasar y no es completamente inútil, pero es muy áspero en los bordes. Descubrirás que algunas cosas se dejan conjeturas y experimentación.
fuente