bsonDB
Base de datos usando bson basado en modelos.
Instalación:
npm install bsondb --save
Tabla de Contenidos
Introducción
bsonDB usa JSON binario y se desarrolla entorno a modelos (estructuras lógicas) para realizar acciones dentro de la base de datos.
Por ahora sólo cuenta con bases de datos locales pero se tiene pensado implementar una base de datos en red al igual que implementar más métodos.
Antes de usar bsonDB se recomienda tener conocimiento sobre los tipos de datos primitivos de JavaScript.
Documentación
A continuación está la documentación de bsonDB. Para poder explicar de mejor manera la documentación, se asumirá que usted tiene definido a bsonDB así:
const DB = require('bsondb');
Schema
new DB.Schema(schema);
Este constructor crea la estructura (propiedades y tipos de valores* de éstas) de los datos que se almacenarán.
Parametro | Tipo | Opcional | Descripción |
---|
schema | Object | No | Un objeto con el nombre de las propiedades y sus respectivos tipos de valores que almacenará. |
Ejemplos
const DB = require('bsondb');
let SchemaNivel = new DB.Schema({
id: String,
nivel: Number,
xp: Number
});
const DB = require('bsondb');
let SchemaPerfil = new DB.Schema({
id: String,
nivel: Number,
monedas: Number,
medallas: {
type: Object,
cantidad: Number,
nombres: Array
}
});
const DB = require('bsondb');
let SchemaGuild = new DB.Schema({
id: String,
descripcion: String,
usuarios: Number,
canales: {
type: Object,
canales_texto: {
type: Object,
nombres: Array
},
canales_voz: {
type: Object,
nombres: Array
}
},
verificado: Boolean
});
@ Valor de Retorno ── Un Schema que sera usado en el constructor Model.
Model
new DB.Model(nombreDB, schema, directorio)
Este constructor crea un modelo que se utilizará para guardar (o hacer cualquier otra acción) en/con la base de datos con su Schema (estructura) respectivo.
Parametro | Tipo | Opcional | Descripción |
---|
nombreDB | String | No | Nombre de la base de datos. |
schema | Schema | No | El Schema que usará el modelo. |
directorio | String | Sí | Nombre del directorio donde se guardará la base de datos. Si el directorio no existe, se creará una carpeta llamada bsonDB y dentro de esa carpeta estará la base de datos que indicaste en nombreDB. |
Ejemplo
const DB = require('bsondb');
let SchemaNivel = new DB.Schema({
id: String,
nivel: Number,
xp: Number
});
module.exports = new DB.Model('Niveles', SchemaNivel);
const NivelModel = new DB.Model('Niveles', SchemaNivel);
@ Valor de Retorno ── Una clase con los métodos que se verán a continuación.
Model#buildModel
Model.buildModel(objeto);
Crea un nuevo modelo basado en las propiedades y tipos de valores que especificaste en su Schema.
El objeto tiene que tener las mismas propiedades que hay en el Schema del modelo, y los valores de las propiedades tienen que tener el mismo tipo de valor especificado en el Schema.
Puede ocurrir un error en los siguientes casos:
- No colocas una(s) propiedad(es) del Schema.
- Colocas una(s) propiedad(es) extra(s) (que no están en el Schema).
- Si el tipo de valor de una propiedad es diferente al tipo de valor que especificaste en el Schema.
Parametro | Tipo | Opcional | Descripción |
---|
objeto | Object | No | Un objeto basado en el Schema. |
Ejemplo
const DB = require('bsondb');
let SchemaReporte = new DB.Schema({
id: String,
usuario: String,
razon: String,
autor: {
type: Object,
id: String,
usuario: String
}
});
const ReporteModel = new DB.Model('Reportes', SchemaReporte);
let NuevoReporte = ReporteModel.buildModel({
id: '292092693377712128',
usuario: 'MegaStar',
razon: 'wapo',
autor: {
id: '372466760848244736',
usuario: 'iBisho'
}
});
console.log(NuevoReporte);
@ Valor de Retorno ── El objeto creado con un método save
.
Modelo#save()
Modelo.save();
Sirve para guardar o actualizar datos en la base de datos. Sólo funciona en el valor de retorno del métodos Model#buildModel y Model#findOne.
Ejemplo
const DB = require('bsondb');
let SchemaReporte = new DB.Schema({
id: String,
usuario: String,
razon: String,
autor: {
type: Object,
id: String,
usuario: String
}
});
const ReporteModel = new DB.Model('Reportes', SchemaReporte);
let NuevoReporte = ReporteModel.buildModel({
id: '292092693377712128',
usuario: 'MegaStar',
razon: 'wapo',
autor: {
id: '372466760848244736',
usuario: 'iBisho'
}
});
NuevoReporte.save()
.then(data => console.log(data))
.catch(error => console.log(error));
@ Promesa
@ Valor de Retorno ── Promesa. Si los datos fueron guardados correctamente, retorna los datos guardados (then). Si ocurrió un error, retorna un error (catch).
Model#findOne
Model.findOne(filtro, callback);
Este metodo te permite buscar un dato especifico en la base de datos, el dato encontrado puede ser modificado y guardado.
Parametro | Tipo | Opcional | Descripcion |
---|
filtro | Function | No | El filtro que se usará para buscar el modelo en la base de datos. |
callback | Function | No | Una función que se usará cuando se complete la búsqueda, tiene sólo 1 argumento. Si se encontró el modelo, el argumento será los datos del modelo. En el caso contrario será undefined. |
Puedes modificar los valores del objeto retornado (si es que hay) del callback, pero sólo las que hay en el Schema, respetando los tipos de valores y propiedades.
Puede ocurrir un error en los siguientes casos:
- Creas una(s) propiedad(es) extra(s) (que no están en el Schema)
- El tipo de valor de la propiedad que actualizas es diferente al tipo de valor que especificaste en el Schema.
El valor del argumento del callback cuenta con el método save()
.
Ejemplo
const DB = require('bsondb');
let SchemaNivel = new DB.Schema({
id: String,
nivel: Number,
xp: Number
});
let NivelModel = new DB.Model('Niveles', SchemaNivel)
let randomXP = Math.floor(Math.random() * 10) + 1;
NivelModel.findOne((modelo) => modelo.id == 'algunaID', (datos) => {
if (!datos) {
let NuevoModelo = NivelModel.buildModel({
id: 'algunaID',
nivel: 1,
xp: randomxp
});
NuevoModelo.save().catch(error => console.log(error));
} else {
if ((datos.xp + randomxp) >= 30) {
++datos.nivel;
datos.xp = 0;
datos.save();
.then(nuevosDatos => console.log(`¡Subiste al nivel ${nuevosDatos.nivel}!`))
.catch(error => console.log(error));
} else {
datos.xp += randomxp;
datos.save().catch(error => console.log(error))
}
}
});
@ Valor de Retorno ── Nada, es un callback.
Model#all
Model.all(callback);
Este metodo te permite obtener todos los datos de la base de datos.
Parametro | Tipo | Opcional | Descripcion |
---|
callback | Function | No | Una función que se usará cuando se complete la búsqueda, tiene sólo 1 argumento. Si se encontraron modelos, el argumento será un Array con todos los modelos existentes. En el caso contrario será undefined. |
Ejemplo
NivelModel.all((datos) => {
if (!datos) {
console.log('No hay ningun dato.');
} else {
let usuarios = []
for (let x = 0; x < datos.length; x++) {
usuarios.push(`ID: ${datos[x].id}, Nivel: ${datos[x].nivel}, XP: ${datos[x].xp}`);
}
console.log(usuarios.join("\n"));
}
});
@ Valor de Retorno ── Nada, es un callback.
Model#filter
Model.filter(filtro, callback)
Busca todos los modelos que coincidan con lo que especificaste en el filtro.
Parametro | Tipo | Opcional | Descripcion |
---|
filtro | Function | No | El filtro que se usará para buscar los modelos en la base de datos. |
callback | Function | No | Una función que se usará cuando se complete la búsqueda, tiene sólo 1 argumento. Si se encontraron modelos, el argumento será un Array de modelos coincidentes. En el caso contrario será undefined. |
Cada modelo dentro del Array cuenta con el método save
.
Ejemplo
NivelModel.filter((modelo) => modelo.nivel > 1, (datos) => {
if (!datos) {
console.log('No se encontró nada.');
} else {
let usuarios = [];
for (let x = 0; x < datos.length; x++) {
usuarios.push(`ID: ${datos[x].id}, Nivel: ${datos[x].nivel}, XP: ${datos[x].xp}`);
}
console.log(usuarios.join("\n"));
}
});
@ Valor de Retorno ── Nada, es un callback.
Model#remove
Model.remove(filtro, callback);
Elimina un modelo (que coincida con el filtro) de la base de datos.
Parametro | Tipo | Opcional | Descripcion |
---|
filtro | Function | No | El filtro que se usará para buscar el modelo en la base de datos. |
callback | Function | No | Una función que se usará cuando se complete la búsqueda, tiene sólo 1 argumento. Si se encontró un modelo, el argumento será el modelo eliminado. En el caso contrario será undefined. |
Ejemplo
NivelModel.remove((modelo) => modelo.id == 'algunaID', (eliminado) => {
if (!eliminado) {
console.log('No se encontró nada para borrar.');
} else {
console.log(`Se eliminó el modelo con ID ${eliminado.id}, su nivel era: ${eliminado.nivel}`);
}
})
@ Valor de Retorno ── Nada, es un callback.
Notas
En BsonDB sólo puedes usar 5 tipos de valores para los Schemas (estructuras).
- String
- Number
- Object
- Array
- Boolean