npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

bsondb

v3.0.0

Published

Base de datos con bson usando modelos.

Downloads

10

Readme

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
});

// Si quieres exportar el modelo.
module.exports = new DB.Model('Niveles', SchemaNivel);

// Si quieres utilizarlo dentro del mismo archivo.
const NivelModel = new DB.Model('Niveles', SchemaNivel);

/**
 * Se creará un archivo llamado "Niveles.bson" en la carpeta que especificaste.
 * Si no especificaste una carpeta, se guardará en la carpeta "bsonDB".
**/

@ 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); // { id: "292092693377712128", usuario... }

@ 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)) // Regresa el objeto guardado.
  .catch(error => console.log(error)); // Si no se guardaron los datos y hubo un 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) => {
  // Creamos el modelo si no se encontró nada.
  if (!datos) {
    let NuevoModelo = NivelModel.buildModel({
      id: 'algunaID',
      nivel: 1,
      xp: randomxp
    });

    NuevoModelo.save().catch(error => console.log(error)); // Lo guardamos en la base de datos.
  //Si se encontró.
  } else {
    if ((datos.xp + randomxp) >= 30) {
      ++datos.nivel; //Le damos +1 a su nivel.
      datos.xp = 0; //Actualizamos su xp a 0.
      datos.save(); //Guardamos los cambios en la base de datos.
        .then(nuevosDatos => console.log(`¡Subiste al nivel ${nuevosDatos.nivel}!`))
        .catch(error => console.log(error));
    //Si el xp ganado no es suficiente para subir de nivel, sólo le aumentamos el xp.
    } else {
      datos.xp += randomxp;
      datos.save().catch(error => console.log(error)) //Guardamos los cambios en la base de datos.
    }
  }
});

@ 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) => {
  // Si no se encontró nada.
  if (!datos) {
    console.log('No hay ningun dato.');
  } else { // Si se encontró. ([{...},{...},{...},...])
    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) => { // Filtra niveles mayores a 1.
  // Si no se encontró nada.
  if (!datos) {
    console.log('No se encontró nada.');
  } else { // Si se encontró. ([{...},{...},{...},...])
    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) => {
  // Si no se encontró nada.
  if (!eliminado) {
    console.log('No se encontró nada para borrar.');
  // Si se encontró y se eliminó.
  } 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