Empezando con Camo

E

Introducción

Ante todo, Camuflaje es un nuevo ODM ES6 basado en clases para MongoDB y Node. Con la corriente principal de ES6 acercándose rápidamente a nosotros, pensé que hacía tiempo que debíamos tener un ODM que aprovechara las nuevas funciones, así que creé Camo. Lo que más me molestó al pasar de la programación Java a JavaScript fue la falta de clases de estilo tradicional. Creo que para los principiantes especialmente, esta es una característica importante que debe tener cualquier ODM.

En este tutorial te mostraré cómo usar las funciones básicas de Camo (declaración de esquema, guardar, cargar, etc.). Para facilitar las comparaciones con Mongoose, mostraré ejemplos similares al artículo Empezando con Mongoose. Esperamos que desde aquí pueda decidir qué estilo / funcionalidad le gusta más para usar en sus proyectos.

Conectando Camo a MongoDB

Nota: El código de este artículo usa v0.12.1 de Camo.

Para conectar Camo a su base de datos, simplemente pase la cadena de conexión (generalmente con el formato mongodb://[ip-address]/[db-name]) al connect() método, que devolverá una instancia del cliente Camo. La instancia del cliente se puede utilizar para configurar la base de datos, pero no es necesaria para declarar, guardar o eliminar sus documentos.

var connect = require('camo').connect;
 
var database;
var uri = 'mongodb://localhost/test';
connect(uri).then(function(db) {
    database = db;
});

Esquemas y modelos

Los modelos son declarado usando clases ES6 y debe extender el Document objeto. El esquema del modelo se declara dentro del constructor y cualquier variable miembro que no comience con un guión bajo (_) se incluye en el esquema y se guarda en la base de datos. Una variable miembro se puede declarar asignándole directamente un tipo o asignándole un objeto con opciones.

var Document = require('camo').Document;
 
class Movie extends Document {
    constructor() {
        super();

        this.title = String;
        this.rating = {
            type: String,
            choices: ['G', 'PG', 'PG-13', 'R']
        };
        this.releaseDate = Date;
        this.hasCreditCookie = Boolean;
    }

    static collectionName() {
        return 'movies';
    }
}

El nombre de la colección se declara pasando anulando la estática collectionName() método. Aunque este nombre rara vez se necesita en el código, será útil al inspeccionar la base de datos MongoDB manualmente, por lo que es mejor mantenerlo relevante para el nombre del modelo.

Si collectionName() no se proporciona, Camo asignará automáticamente un nombre de colección basado en el nombre de la clase.

Crear, recuperar, actualizar y eliminar (CRUD)

Para crear una instancia del modelo, simplemente use el create() , que maneja gran parte del trabajo de creación de instancias por usted. Opcionalmente, los datos se pueden pasar a create() que se asignará a las variables miembro. Si no se pasan datos para una variable, se le asigna un valor predeterminado (si se especifica en el esquema) o se le asigna null.

var thor = Movie.create({
    title: 'Thor',
    rating: 'PG-13',
    releaseDate: new Date(2011, 4, 2),
    hasCreditCookie: true
});

thor.save().then(function
    console.log(thor);
});

Cuando ahorro instancia, los datos se insertarán en la base de datos si no se han guardado previamente. Si la instancia ya se ha guardado en la base de datos, el documento existente se actualiza con los cambios.

A Eliminar un documento, simplemente llame al delete método en él. También puede utilizar la estática deleteOne(), deleteMany()o findOneAndDelete() en la clase modelo. El número de documentos eliminados de la base de datos se devolverá dentro del Promise.

thor.delete().then(function(numDeleted) {
    console.log(numDeleted);
});

A carga un documento de la base de datos, tiene algunas opciones dependiendo de lo que desee hacer. Las opciones son:

  • findOne() para cargar un solo documento (o nulo si no existe)
// Load only the 'Thor' movie
Movie.findOne({ title: 'Thor' }).then(function(movie) {
	console.log(thor);
});
  • find() para cargar varios documentos (o una matriz vacía si no existe)
// Load all movies that have a credit cookie
Movie.find({ hasCreditCookie: true }).then(function(movies) {
    console.log(thor);
});
  • findOneAndUpdate() para recuperar un documento y actualizarlo en una sola operación atómica
// Update 'Thor' to have a rating of 'R'
Movie.findOneAndUpdate({ title: 'Thor' }, { rating: 'R' }).then(function(movies) {
    console.log(thor);
});

Extras

Gracias al soporte de Camo de las clases de ES6, podemos definir fácilmente estáticas, virtuales y métodos para los modelos, lo que hace que el código del modelo sea mucho más organizado y legible.

var Document = require('camo').Document;
 
class Movie extends Document {
    constructor() {
        super();

        // Schema declaration here...
    }

    set releaseYear(year) {
        this.releaseDate.setYear(year);
    }

    get releaseYear() {
        return this.releaseDate.getFullYear();
    }

    yearsOld() {
        return new Date().getFullYear() - this.releaseDate.getFullYear();
    }

    static findAllRMovies() {
        return this.find({ rating: 'R' });
    }
}

var uri = 'nedb://memory';

connect(uri).then(function(db) {
    var thor = Movie.create({
        title: 'The Matrix',
        rating: 'R',
        releaseDate: new Date(1999, 2, 31),
        hasCreditCookie: true
    });
    
    return thor.save();
}).then(function
    return Movie.findAllRMovies();
}).then(function(movies) {
    movies.forEach(function(m) {
        console.log(m.title + ': ' + m.releaseDate.getFullYear());
    });
});

Además de interactuar con MongoDB, Camo también admite NeDB, que es como el equivalente de SQLite a Mongo. Un ejemplo de uso de NeDB se muestra arriba. Su uso es muy útil durante el desarrollo y las pruebas, ya que los datos se pueden almacenar en un archivo o simplemente en la memoria. ¡Esto también significa que puede usar Camo en el código del navegador frontal!

Dirígete al página del proyecto para más información. ¿Te gusta lo que ves? ¡Destaque el proyecto y corra la voz!

 

About the author

Ramiro de la Vega

Bienvenido a Pharos.sh

Soy Ramiro de la Vega, Estadounidense con raíces Españolas. Empecé a programar hace casi 20 años cuando era muy jovencito.

Espero que en mi web encuentres la inspiración y ayuda que necesitas para adentrarte en el fantástico mundo de la programación y conseguir tus objetivos por difíciles que sean.

Add comment

Sobre mi

Últimos Post

Etiquetas

Esta web utiliza cookies propias para su correcto funcionamiento. Al hacer clic en el botón Aceptar, aceptas el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Más información
Privacidad