Hace poco leí el artículo sobre Scotch.io sobre el uso de Mongoose y MongoDB. Pensé, oye, Couchbase puede hacer lo mismo si usas Ottoman en lugar de Mongoose.
Este artículo va a recorrer las mismas comparaciones que el artículo de Scotch.io, pero utilizando Ottoman y Couchbase en lugar de Mongoose y MongoDB.
Qué es el otomano
Ottoman, para Couchbase, es un mapeador de documentos de objetos (ODM) que le permite construir cómo sería su modelo de objetos, y luego auto-generar toda la lógica boilerplate que va con él.
Ottoman nos permite acceder fácilmente a comandos CRUD para Couchbase Server usando Node.js. Para usar Ottoman, asegúrate de añadirlo a tu proyecto Node.js usando el siguiente comando:
1 2 3 |
npm instale otomana --guardar |
Ahora que las librerías han sido descargadas a nuestro proyecto, necesitamos incluirlas en nuestro código fuente. Esto se puede hacer añadiendo lo siguiente a uno de sus archivos JavaScript:
1 2 3 |
var otomana = requiere("otomana"); |
Con las librerías de Ottoman incluidas en el proyecto, ahora tenemos que dar acceso a Ottoman a uno de nuestros cubos.
1 2 3 |
otomana.cubo = (nuevo couchbase.Grupo("http://localhost:8091")).openBucket("bucket-name-here"); |
Si has utilizado el SDK de Node.js para Couchbase antes, lo anterior te resultará familiar. Simplemente nos conectamos a un clúster, abrimos un bucket y lo asignamos a Ottoman.
En este punto podemos empezar a utilizar Ottoman para acelerar nuestro proceso de desarrollo.
Definir un modelo
Antes de que podamos empezar a hacer operaciones CRUD contra Couchbase, necesitamos definir nuestro modelo Ottoman. Estos modelos representan documentos en nuestra base de datos.
Los modelos que creamos con Ottoman pueden tener propiedades y métodos. A la parte de los métodos llegaremos pronto, pero por ahora echa un vistazo a modelos sencillos con propiedades.
Modelo de ejemplo para usuarios
Tomemos el siguiente modelo para los nuevos usuarios de nuestra aplicación (sí, es simple en este ejemplo).
1 2 3 4 5 6 7 8 |
var UserModel = otomana.modelo("Usuario", { nombre: {tipo: "cadena"}, apellido: {tipo: "cadena"}, correo electrónico: {tipo: "cadena"}, fecha_de_creación: {tipo: "Fecha", por defecto: Fecha.ahora} }); |
Ahora tenemos un modelo que puede utilizarse así:
1 2 3 4 5 6 7 |
var miUsuario = nuevo UserModel({ nombre: "Nic", apellido: "Raboy", correo electrónico: "test@example.com" }); |
Fijamos el Nombre de pila, apellidoy correo electrónicopero no tenemos que fijar el fecha_de_creación valor. Esto se debe a que por defecto, si no lo establecemos, se establecerá como la marca de tiempo actual.
Métodos personalizados
Digamos que queremos que un método haga una tarea consistente dentro de nuestro modelo. Tomemos por ejemplo lo siguiente, suponiendo que ya hemos creado nuestro simple objeto UserModel.
1 2 3 4 5 |
UserModel.prototipo.printWhoDaBoss = función() { consola.registro(este.nombre + " " + este.apellido + " is Da Boss"); } |
En teoría, esto imprimiría el nombre y el apellido de un modelo otomano concreto.
Ejemplos de uso de métodos personalizados
Para utilizar un método personalizado, podemos utilizar el método printWhoDaBoss como se ha visto anteriormente y hacer algo como esto:
1 2 3 4 5 6 7 8 9 |
var miUsuario = nuevo UserModel({ nombre: "Nic", apellido: "Raboy", correo electrónico: "test@example.com" }); miUsuario.printWhoDaBoss(); |
Lo anterior imprimiría Nic Raboy es el jefe. Por supuesto, esa función en particular es inútil, pero puedes usar tu imaginación para construir algo mejor con el concepto.
Ejecutar una función antes de guardarla
¿Qué pasa si queremos ejecutar una tarea antes de que un documento se guarde en Couchbase? Esto se puede conseguir utilizando la función pre método reservado que viene con Ottoman. Por ejemplo, digamos que queremos modificar el apellido de todos antes de que se guarden:
1 2 3 4 5 6 |
UserModel.pre("guardar", función(siguiente) { este.apellido = "da Boss" + este.apellido; siguiente(); }); |
Ahora, cuando alguien intente guardar un documento, lo que se demostrará en la siguiente sección, se antepondrá su apellido. Por ejemplo Raboy se convertiría en da Boss Raboy. No es especialmente útil en este caso, pero puedes hacerte una idea.
Crear un documento
Para crear documentos tenemos que utilizar la función incorporada guardar de Ottoman. Con nuestro modelo, podemos hacer algo como esto:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
var miUsuario = nuevo UserModel({ nombre: "Nic", apellido: "Raboy", correo electrónico: "test@example.com" }); miUsuario.guardar(función(error) { si(error) { consola.registro("Se ha producido un error -> " + JSON.stringify(error)); } consola.registro("¡Salva el éxito!"); }); |
Se generaría una clave y el documento se guardaría en la base de datos.
Lectura de documentos NoSQL
Leer documentos con Ottoman es un poco diferente porque hay diferentes tipos de lecturas que podemos hacer. Vamos a desglosar algunos escenarios de uso.
Buscar todos los documentos
A menudo es difícil en NoSQL obtener documentos cuando no conoces el id del documento. Sin crear una vista o usar la tecnología N1QL de Couchbase, no tendrías mucha suerte. Aquí tienes una alternativa.
1 2 3 4 5 6 7 8 |
UserModel.encontrar({}, función(error, resultado) { si(error) { consola.registro("Se ha producido un error -> " + JSON.stringify(error)); } // Haz algo con los modelos otomanos resultantes }); |
Lo anterior encontraría todos los documentos que fueron creados usando el Ottoman UserModel.
Buscar un documento concreto
He aquí otro escenario. Supongamos que no quieres todos los documentos y no conoces el id del documento. Puedes hacer una consulta con Ottoman expandiendo sobre la base de datos encontrar mando.
1 2 3 4 5 6 7 8 |
UserModel.encontrar({apellido: "Raboy"}, función(error, resultado) { si(error) { consola.registro("Se ha producido un error -> " + JSON.stringify(error)); } // Haz algo con el modelo otomano resultante }); |
Buscar un documento por ID
Digamos que conoces el id del documento que quieres. Usted puede agarrar el modelo otomano ejecutando:
1 2 3 4 5 6 7 8 |
UserModel.getById("documento-id-aquí", función(error, resultado) { si(error) { consola.registro("Se ha producido un error -> " + JSON.stringify(error)); } // Haz algo con el modelo otomano resultante }); |
Esto es similar a utilizar la función consiga del SDK de Node.js, sin embargo, en lugar de datos JSON con los que te quedas, tienes un modelo Ottoman completamente funcional.
Actualizar un documento existente
Actualizar documentos con Ottoman puede ser un poco complicado porque primero debes haber cargado el documento antes de intentar hacer una manipulación sobre él. Lo que podrías hacer es encontrar el documento en particular por id, y luego ejecutar el comando guardar de esta manera:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
UserModel.getById("documento-id-aquí", función(error, resultado) { si(error) { consola.registro("Se ha producido un error -> " + JSON.stringify(error)); } resultado.nombre = "Nicolas", resultado.guardar(función(error) { si(error) { consola.registro("Se ha producido un error -> " + JSON.stringify(error)); } }); }); |
En el ejemplo anterior, primero habría obtenido mi modelo concreto, habría cambiado sólo el nombre del mismo y, a continuación, habría llamado a guardar. La dirección guardar creará o actualizará, pero depende de usted conducir hasta ese punto.
Eliminar un documento
La supresión de un documento funcionará de forma similar a la actualización de un documento con Ottoman. Primero debe cargar el documento haciendo una búsqueda, luego llamando a la función eliminar función. A continuación se muestra un ejemplo sencillo:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
UserModel.getById("documento-id-aquí", función(error, resultado) { si(error) { consola.registro("Se ha producido un error -> " + JSON.stringify(error)); } resultado.eliminar(función(error) { si(error) { consola.registro("Se ha producido un error -> " + JSON.stringify(error)); } consola.registro("¡El documento fue retirado!"); }); }); |
Conclusión
Ottoman es una gran herramienta ODM para Couchbase que modela nuestros objetos y juega muy bien para operaciones de tipo CRUD. Mongoose para MongoDB intenta ser como Ottoman como se demuestra en el artículo sobre Scotch.io sobre Mongoose y MongoDB. Este artículo pretendía mostrar cómo Ottoman es igual de fácil, si no más, de usar.