megadb es una actualizacion de mi antiguo package llamado mega-dtbs (https://www.npmjs.com/package/mega-dtbs)
Mejoras
- Se agrego nuevos metodos y parametros especiales.
- Se actualizo absolutamente todo el codigo para una mejor legibilidad y funcionamiento.
- La base de datos ahora es mas persistente.
- Ahora podras tener tus base de datos por separado.
- Errores descriptivos.
Importante
- Se creara una carpeta llamada mega_databases en la carpeta principal de tu proyecto, no borres esta carpeta a menos que quieras borrar absolutamente todas tus base de datos.
Constructor:
Metodos:
Instalacion:
npm install megadb --save
Ejemplo del requerimiento del package:
const db = require('megadb');
### crearDB
crearDB(nombre_db, sub_directorio)
El constructor crearDB creará automáticamente una carpeta llamada mega_databases en tu proyecto, dentro de esta carpeta se almacenaran tus base de datos.
Argumentos
- nombre_db: Nombre del archivo con el que se creara la base de datos, si el nombre de la base de datos que pusiste ya existia, lo que hara es devolver los datos existentes de esa db.
- sub_directorio (opcional): Este argumento es opcional, es para especificar si quieres que la base de datos se guarde en un sub diréctorio dentro de la carpeta mega_databases.
Ejemplos
const db = require('megadb');
let niveles = new db.crearDB('niveles');
const db = require('megadb');
let economia = new db.crearDB('guild_1', 'economia_db');
### establecer
establecer(clave, valor, clave_split)
Este metodo te permite crear propiedades mediante una clave, tambien te permite actualizar datos existentes por nuevos.
Argumentos
- clave: Aqui deberas de poner el nombre de la propiedad que quieres crear, puedes usar el . seguido de otro nombre para crear o para acceder a propiedades anidadas (el . es un signo por default, puedes cambiarlo en clave_split)
- valor: Aqui deberas de poner el valor que recibira la propiedad que especificaste en el argumento clave.
- clave_split (opcional): Este argumento es opcional, aqui puedes especificar el signo que se usara para crear o para acceder a propiedades anidadas en el argumento clave (por default es el .)
Retorna
Promesa con los datos actualizados
Ejemplos
const db = require('megadb');
let niveles = new db.crearDB('niveles');
niveles.establecer('MegaStar', {xp: 0, nivel: 10})
niveles.establecer('MegaStar.xp', 100)
niveles.establecer('MoDeR', 100)
niveles.establecer('MoDeR-datos-monedas', 200, "-")
niveles.establecer('MoDeR.datos.banco', 1000)
niveles.establecer('RatSageM', [])
{
"MegaStar": {
"xp": 100,
"nivel": 10
},
"MoDeR": {
"datos": {
"monedas": 200,
"banco": 1000
}
},
"RatSageM": []
}
### obtener
obtener(clave, clave_split)
Este metodo te permite obtener los datos(valores) de una propiedad especifica.
Argumentos
- clave: Aqui deberas de poner el nombre de la propiedad que quieres obtener, puedes usar el . seguido de otro nombre para acceder a propiedades anidadas (el . es un signo por default, puedes cambiarlo en clave_split)
- clave_split (opcional): Este argumento es opcional, aqui puedes especificar el signo que se usara para acceder a propiedades anidada en el argumento clave (por default es el .)
Retorna
Promesa con los datos que se obtuvo.
Error
En caso de que ocurra un error, esto regresara un objeto con el error descriptivo (puedes obtenerlo con un .catch(error => ))
Click aqui para ver los tipos de errores
Ejemplos
const db = require('megadb');
let niveles = new db.crearDB('niveles');
niveles.obtener('MegaStar')
niveles.obtener('MegaStar.nivel')
niveles.obtener('MoDeR-datos-banco', "-")
### tiene
tiene(clave, clave_split)
Este metodo te permite verificar si existe una propiedad especifica.
Argumentos
- clave: Aqui deberas de poner el nombre de la propiedad que quieres verificar, puedes usar el . seguido de otro nombre para acceder a propiedades anidadas (el . es un signo por default, puedes cambiarlo en clave_split)
- clave_split (opcional): Este argumento es opcional, aqui puedes especificar el signo que se usara para acceder a propiedades anidada en el argumento clave (por default es el .)
Retorna
- true si la propiedad existe.
- false si la propiedad no existe.
Ejemplos
const db = require('megadb');
let niveles = new db.crearDB('niveles');
niveles.tiene('MegaStar')
niveles.tiene('Mario')
niveles.tiene('MegaStar.monedas')
niveles.tiene('MoDeR-datos-monedas', "-")
### eliminar
eliminar(clave, clave_split)
Este metodo te permite eliminar una propiedad especifica.
Argumentos
- clave: Aqui deberas de poner el nombre de la propiedad que quieres eliminar, puedes usar el . seguido de otro nombre para acceder a propiedades anidadas (el . es un signo por default, puedes cambiarlo en clave_split)
- clave_split (opcional): Este argumento es opcional, aqui puedes especificar el signo que se usara para acceder a propiedades anidada en el argumento clave (por default es el .)
Retorna
- true si la propiedad se elimino correctamente.
- false si la propiedad no se elimino (no existe).
Ejemplos
const db = require('megadb');
let niveles = new db.crearDB('niveles');
niveles.eliminar('MegaStar.xp')
niveles.eliminar('MoDeR.datos.banco')
niveles.eliminar('Mario')
niveles.tiene('MoDeR.datos.banco')
niveles.tiene('MegaStar.xp')
niveles.obtener('MegaStar')
niveles.obtener('MoDeR-datos', "-")
{
"MegaStar": {
"nivel": 10
},
"MoDeR": {
"datos": {
"monedas": 200
}
},
"RatSageM": []
}
### datos
datos()
Este metodo regresa todas las propiedades de la base de datos, en otras palabras todos los datos.
Argumentos
Ninguno
Retorna
Promesa con todos los datos.
Ejemplos
const db = require('megadb');
let niveles = new db.crearDB('niveles');
niveles.datos().then(n => {
console.log(n)
})
{
"MegaStar": {
"nivel": 10
},
"MoDeR": {
"datos": {
"monedas": 100
}
},
"RatSageM": []
}
### push
push(clave, valor, clave_split)
Este metodo te permite agregar un elemento a un array.
Argumentos
- clave: Aqui deberas de poner el nombre de la propiedad a la que quieres agregar el elemento, puedes usar el . seguido de otro nombre para acceder a propiedades anidadas (el . es un signo por default, puedes cambiarlo en clave_split)
- valor: Aqui deberas de poner el elemento que se agregara en el array que especificaste en el argumento clave.
- clave_split (opcional): Este argumento es opcional, aqui puedes especificar el signo que se usara para acceder a propiedades anidadas en el argumento clave (por default es el .)
Retorna
Promesa con el array actualizado.
Error
En caso de que ocurra un error, esto regresara un objeto con el error descriptivo (puedes obtenerlo con un .catch(error => ))
Click aqui para ver los tipos de errores
Ejemplos
const db = require('megadb');
let niveles = new db.crearDB('niveles');
niveles.push('RatSageM', 'manzana')
niveles.establecer('MGstar', {items: ["platano"]})
niveles.push('MGstar', 'sandia')
niveles.push('MGstar.items', 'sandia')
{
"MegaStar": {
"nivel": 10
},
"MoDeR": {
"datos": {
"monedas": 200
}
},
"RatSageM": ["manzana"],
"MGstar": {
"items": ["platano", "sandia"]
}
}
### extract
extract(clave, valor, clave_split)
Este metodo te permite remover un elemento especifico de un array.
Argumentos
- clave: Aqui deberas de poner el nombre de la propiedad a la que quieres remover el elemento, puedes usar el . seguido de otro nombre para acceder a propiedades anidadas (el . es un signo por default, puedes cambiarlo en clave_split)
- valor: Aqui deberas de poner el elemento que se removera del array que especificaste en el argumento clave.
- clave_split (opcional): Este argumento es opcional, aqui puedes especificar el signo que se usara para acceder a propiedades anidadas en el argumento clave (por default es el .)
Retorna
Promesa con el array actualizado.
Error
En caso de que ocurra un error, esto regresara un objeto con el error descriptivo (puedes obtenerlo con un .catch(error => ))
Click aqui para ver los tipos de errores
Ejemplos
const db = require('megadb');
let niveles = new db.crearDB('niveles');
niveles.extract('MGstar', 'platano')
niveles.extract('RatSageM', 'manzana')
niveles.extract('MGstar.items', 'platano')
niveles.extract('MGstar.items', 'durazno')
{
"MegaStar": {
"nivel": 10
},
"MoDeR": {
"datos": {
"monedas": 200
}
},
"RatSageM": [],
"MGstar": {
"items": ["sandia"]
}
}
### sumar
sumar(clave, valor, clave_split)
Este metodo te permite sumar una cantidad especifica a una propiedad, el valor propiedad debe ser un numero.
Argumentos
- clave: Aqui deberas de poner el nombre de la propiedad a la que quieres sumarle una cantidad especifica, puedes usar el . seguido de otro nombre para acceder a propiedades anidadas (el . es un signo por default, puedes cambiarlo en clave_split)
- valor: Aqui deberas de poner la cantidad que se le sumara a propiedad que especificaste en el argumento clave, esto debe ser un numero.
- clave_split (opcional): Este argumento es opcional, aqui puedes especificar el signo que se usara para acceder a propiedades anidadas en el argumento clave (por default es el .)
Retorna
Promesa con el valor actualizado.
Error
En caso de que ocurra un error, esto regresara un objeto con el error descriptivo (puedes obtenerlo con un .catch(error => ))
Click aqui para ver los tipos de errores
Ejemplos
const db = require('megadb');
let niveles = new db.crearDB('niveles');
niveles.establecer('Nelson', 20)
niveles.sumar('Nelson', 25)
niveles.establecer('Sun.datos.monedas', 10)
niveles.sumar('Sun.datos', 90)
niveles.sumar('Sun-datos-monedas', 90, "-")
{
"MegaStar": {
"nivel": 10
},
"MoDeR": {
"datos": {
"monedas": 200
}
},
"RatSageM": [],
"MGstar": {
"items": ["sandia"]
},
"Nelson": 45,
"Sun": {
"datos": {
"monedas": 100
}
}
}
### restar
restar(clave, valor, clave_split)
Este metodo te permite restar una cantidad especifica a una propiedad, el valor propiedad debe ser un numero.
Argumentos
- clave: Aqui deberas de poner el nombre de la propiedad a la que quieres restarle una cantidad especifica, puedes usar el . seguido de otro nombre para acceder a propiedades anidadas (el . es un signo por default, puedes cambiarlo en clave_split)
- valor: Aqui deberas de poner la cantidad que se le restara a la propiedad que especificaste en el argumento clave, esto debe ser un numero.
- clave_split (opcional): Este argumento es opcional, aqui puedes especificar el signo que se usara para acceder a propiedades anidadas en el argumento clave (por default es el .)
Retorna
Promesa con el valor actualizado.
Error
En caso de que ocurra un error, esto regresara un objeto con el error descriptivo (puedes obtenerlo con un .catch(error => ))
Click aqui para ver los tipos de errores
Ejemplos
const db = require('megadb');
let niveles = new db.crearDB('niveles');
niveles.restar('Nelson', 40)
niveles.restar('Sun.datos', 100)
niveles.restar('Sun-datos-monedas', 100, "-")
{
"MegaStar": {
"nivel": 10
},
"MoDeR": {
"datos": {
"monedas": 200
}
},
"RatSageM": [],
"MGstar": {
"items": ["sandia"]
},
"Nelson": 5,
"Sun": {
"datos": {
"monedas": 0
}
}
}
### ordenar
ordenar(clave, valor, clave_split)
Este metodo te permite ordenar los valores de una propiedad de forma descendente, ten en cuenta que el valor de la propiedad que quieras ordenar debe ser un numero.
Argumentos
-
clave: La clave puede recibir dos tipos de valores, en el caso de que quieras ordenar las propiedades un objeto especifico, puedes colocar el nombre del objecto. Si quieres ordenar las propiedades de un objecto anidado, puedes usar el . seguido del nombre del objeto anidado (el . es un signo por default, puedes cambiarlo en clave_split)
Puedes usar false en caso de que tengas propiedades que no sean objetos anidados.
-
valor: El valor tambien puede recibir dos tipos de valores, en el caso de que las propiedades del objeto que quieres ordenar tambien sean objetos y mantengan propiedades, puedes colocar el nombre de la propiedad que se usara como referencia para ordenarlos de forma descendente, en el caso de que estas propiedades tambien sean objetos, puedes usar el . seguido del nombre del objeto y la propiedad que quieres ordenar (el . es un signo por default, puedes cambiarlo en clave_split)
Puedes usar false en caso de que los valores de las propiedades no sean objetos anidados.
-
clave_split (opcional): Este argumento es opcional, aqui puedes especificar el signo que se usara para acceder a propiedades anidadas en el argumento clave y el argumento valor (por default es el .)
Retorna
Promesa con un array, este array contiene las propiedades ordenadas de forma descendente.
Error
En caso de que ocurra un error, esto regresara un objeto con el error descriptivo (puedes obtenerlo con un .catch(error => ))
Click aqui para ver los tipos de errores
Ejemplos
const db = require('megadb');
let economia = new db.crearDB('guild_1', 'economia_db');
economia.establecer('MegaStar', 100)
economia.establecer('MoDeR', 40)
economia.establecer('ratsagem', 320)
economia.ordenar(false, false)
const db = require('megadb');
let economia = new db.crearDB('guild_1', 'economia_db');
economia.establecer('MegaStar', {monedas: 100})
economia.establecer('MoDeR', {monedas: 40})
economia.establecer('ratsagem', {monedas: 320})
economia.ordenar(false, "monedas")
const db = require('megadb');
let economia = new db.crearDB('guild_2', 'economia_db');
let usuarios_data = {
'MegaStar': 100,
'MoDeR': 40,
'ratsagem': 320
}
economia.establecer('usuarios', usuarios_data)
economia.ordenar("usuarios", false)
const db = require('megadb');
let economia = new db.crearDB('guild_3', 'economia_db');
let usuarios_data = {
"MegaStar": {monedas: 50},
"MoDeR": {monedas: 67},
"ratsagem": {monedas: 4}
}
economia.establecer('usuarios', usuarios_data)
economia.ordenar("usuarios", "monedas")
const db = require('megadb');
let economia = new db.crearDB('guild_4', 'economia_db');
let usuarios = {
"megastar": {monedas: 10, medallas: 15},
"moder": {monedas: 50, medallas: 20},
"ratsagem": {monedas: 25, medallas: 5}
}
economia.establecer('servidor.datos', usuarios)
economia.ordenar('servidor.datos', "medallas")
const db = require('megadb');
let economia = new db.crearDB('guild_5', 'economia_db');
let usuarios = {
"megastar": {stats: {monedas: 10}},
"moder": {stats: {monedas: 50}},
"ratsagem": {stats: {monedas: 25}}
}
economia.establecer('servidor.datos', usuarios)
economia.ordenar('servidor-datos', "stats-monedas", "-")
### random
random(clave, cantidad, clave_split)
Este metodo te permite obtener una cantidad especifica de propiedades aleatoriamente (random), nunca se repetiran.
Argumentos
-
clave: La clave puede recibir dos tipos de valores, en el caso de que quieras obtener aleatoriamente una cantidad especifica de propiedades de un objeto, puedes colocar el nombre del objecto. Si quieres obtener aleatoriamente una cantidad especifica de propiedades de un objecto anidado, puedes usar el . seguido del nombre del objeto anidado (el . es un signo por default, puedes cambiarlo en clave_split)
Puedes usar false en caso de que tengas propiedades que no sean objetos anidados.
-
cantidad: Aqui deberas de poner la cantidad(un numero) de propiedades random que se obtendra del objeto que especificaste en el argumento clave.
-
clave_split (opcional): Este argumento es opcional, aqui puedes especificar el signo que se usara para acceder a propiedades anidadas en el argumento clave (por default es el .)
Retorna
Promesa con un array, este array contiene las propiedades que fueron seleccionadas aleatoriamente.
Error
En caso de que ocurra un error, esto regresara un objeto con el error descriptivo (puedes obtenerlo con un .catch(error => ))
Click aqui para ver los tipos de errores
Ejemplos
const db = require('megadb');
let giveaway = new db.crearDB('giveaway');
let usuarios = {
"MegaStar": {ganadas: 0},
"MoDeR": {ganadas: 0},
"ratsagem": {ganadas: 0},
"Sun": {ganadas: 0},
"MGstar": {ganadas: 0},
"ruru": {ganadas: 0}
}
giveaway.establecer('MegaStar', {ganadas: 0})
giveaway.establecer('MoDeR', {ganadas: 0})
giveaway.establecer('ratsagem', {ganadas: 0})
giveaway.establecer('Sun', {ganadas: 0})
giveaway.establecer('MGstar', {ganadas: 0})
giveaway.establecer('ruru', {ganadas: 0})
{
"MegaStar": {
"ganadas": 0
},
"MoDeR": {
"ganadas": 0
},
"ratsagem": {
"ganadas": 0
},
"pedro": {
"ganadas": 0
},
"MGstar": {
"ganadas": 0
},
"ruru": {
"ganadas": 0
}
}
giveaway.random(false, 4)
const db = require('megadb');
let giveaway = new db.crearDB('giveaway1');
let usuarios = {
"12132131231242343": {ganadas: 0},
"12132454545454543": {ganadas: 2},
"13243242342342343": {ganadas: 1},
"12138786867868683": {ganadas: 6},
"18989896797978973": {ganadas: 0},
"12121212135345346": {ganadas: 5}
}
giveaway.establecer('users_ID', usuarios)
{
"users_ID": {
"12132131231242343": {
"ganadas": 0
},
"12132454545454543": {
"ganadas": 2
},
"13243242342342343": {
"ganadas": 1
},
"12138786867868683": {
"ganadas": 6
},
"18989896797978973": {
"ganadas": 0
},
"12121212135345346": {
"ganadas": 5
}
}
}
giveaway.random("users_ID", 4)
### existeDB
existeDB(nombre_db)
Este metodo te permite verificar si existe una especifica base de datos en la carpeta mega_databases o en sub directorio.
Argumentos
- nombre_db: Aqui debe de ir el nombre de la base de datos que quires verificar si existe, si usaste la opcion del sub directorio en el constructor crearDB, esto automaticamente buscara en el sub directorio, de lo contrario se buscara en la carpeta mega_databases si no usaste esta opcion.
Retorna
- true si la base de datos existe.
- false si la base de datos no existe.
Ejemplos
const db = require("megadb");
let economia = new db.crearDB("guild_1", "economia_db")
console.log(economia.existeDB("guild_2"))
console.log(economia.existeDB("guild_5"))
console.log(economia.existeDB("guild_8"))
console.log(economia.existeDB("niveles"))
const db = require("megadb");
let niveles = new db.crearDB("niveles")
console.log(niveles.existeDB("giveaway"))
console.log(niveles.existeDB("giveaway1"))
console.log(niveles.existeDB("guild_8"))
console.log(niveles.existeDB("mydb"))
### convert_megadtbs
convert_megadtbs()
Este metodo es especial, usalo solo cuando quieras adaptar tu base de datos del npm mega-dtbs al megadb.
Para adaptar tu base de datos del mega-dtbs a megadb, debes de poner el nombre "mega_db" en el constructor crearDB.
Asegurate de que el archivo mega_db.json se encuentre dentro de la carpeta mega_databases.
Argumentos
Ninguno.
Retorna
Nada.
Demostracion
https://youtu.be/rouyoy0SJN0
Ejemplos
const db = require("megadb");
let megadb = new db.crearDB("mega_db")
megadb.convert_megadtbs()
## Errores
Existen 5 tipos de errores que te pueden salir en el .catch, esto retorna un objeto que contiene 2 propiedades:
- type: Aqui se muestra el tipo de error.
- mensaje: Aqui se muestra el error descriptivo.
Tipos de errores:
1: {type: "DATABASE NO EXISTENTE", mensaje: "La base de datos {nombre_database} no existe: {ruta_directorio}"}
2: {type: "PROPIEDAD NO EXISTENTE",mensaje: "No se encontro la propiedad {nombre_propiedad}"}
3: {type: "NUMERO NO EXISTENTE",mensaje: "El valor de la propiedad {nombre_propiedad} no es un numero"}
4: {type: "ARRAY NO EXISTENTE",mensaje: "El valor de la propiedad {nombre_propiedad} no es un array"}
5: {type: "ITEM NO EXISTENTE",mensaje: "El item {elemento} no existe en el array {nombre_array}"}
Ejemplo:
const db = require("megadb");
let paiases = new db.crearDB("paises")
idiomas.establecer("norte", ["argentina", "brasil", "colombia"])
idiomas.extract("norte", "bolivia").then(nuevos => {
console.log(nuevos)
}).catch(error => {
console.log(`error: ${error.type} , mensaje: ${error.mensaje}`)
})
Ejemplo usando algunas funciones:
const db = require('megadb');
let estadisticas = new db.crearDB('niveles');
let randomXP = Math.floor(Math.random() * 60) + 1;
if(!estadisticas.tiene('MegaStar')) {
estadisticas.establecer('MegaStar', {xp: 0, nivel: 1});
}
estadisticas.obtener('MegaStar').then(datos => {
if((randomXP + datos.xp) >= 50) {
estadisticas.establecer('MegaStar', {xp: 0, nivel: datos.nivel + 1}).then(nuevos_datos => {
console.log(`MegaStar subio al nivel ${nuevos_datos.nivel}!`)
}).catch(err => console.log(err))
}
else{
estadisticas.sumar('MegaStar.xp', randomXP)
}
}).catch(err => console.log(err))
const db = require('megadb');
let escuela = new db.crearDB('alumnos');
escuela.establecer('MegaStar', {edad: 20, profesion: ['programador']});
escuela.establecer('MoDeR', {edad: 18, profesion: ['programador']});
escuela.establecer('RatSageM', {edad: 25, profesion: ['maestro']});
escuela.datos().then(alumnos => {
for(var alumno in alumnos) {
if(alumnos[alumno].profesion.includes('programador')) {
escuela.push(`${alumno}.profesion`, 'javascript');
continue;
}
escuela.eliminar(`${alumno}`)
}
})
{
"MegaStar": {
"edad": 20,
"profesion": ["programador", "javascript"]
},
"MoDeR": {
"edad": 18,
"profesion": ["programador", "javascript"]
}
}
const db = require('megadb');
let mercado_db = new db.crearDB('mercado');
let nombres = ['manzana', 'melocoton', 'sandia', 'lechuga']
mercado_db.establecer('frutas', nombres);
mercado_db.obtener('frutas').then(f => {
for(var x = 0; x < f.length; x++) {
if(f[x] == 'lechuga') {
mercado_db.extract('lechuga').then(nuevas_frutas => {
console.log(`La ${f[x]} no es una fruta, acabo de removerlo.`)
}).catch(error => {
console.log(`Ocurrio un error: ${error.type}, mensaje: ${error.mensaje}`)
})
break;
}
}
}).catch(error => {
console.log(error)
})
{
"frutas": ["manzana", "melocoton", "sandia"]
}
const db = require('megadb');
let economia_db = new db.crearDB('economia')
let usuarios = {
megastar: {monedas: 10, medallas: 15},
moder: {monedas: 50, medallas: 20},
ratsagem: {monedas: 25, medallas: 5}
}
economia_db.establecer('servidor.datos', usuarios)
economia_db.establecer('servidor.datos', "monedas").then(nuevos => {
let ranking = []
for(var x = 0; x < nuevos.length; x++) {
ranking.push(`rank #${parseInt(x+1)} | usuario: ${nuevos[x].clave} | monedas: ${nuevos[x].valor.monedas} | medallas: ${nuevos[x].valor.medallas}\n`)
}
})