JSON Queries com DB.js

DB.js é uma biblioteca Javascript de código aberto desenvolvida para manipulação de dados. As principais funcionalidades são filtrar, unir, agrupar e ordenar.

Índice

Métodos

find

.find({ prop: value , ... })

Filtra os objetos por uma ou várias condições. Cada condição pode ser formada por até 10 operações.

Exemplo:

var products = [
	{name: "notebook", cat: 1, price: 1799.00},
	{name: "computer", cat: 1, price: 978.50},
	{name: "js book" , cat: 2, price: 31.00},
	{name: "py book" , cat: 2, price: 29.00},
	{name: "game"    , cat: 3, price: 150.00},
	{name: "ipod"    , cat: 4, price: 190.00}
];


db(products).find({cat: {eq: 2}}).print('name');

// js book
// py book

Múltiplas condições

db(products)
	// busca produtos com
	.find({
		// preço menor ou igual a 190
		price: {lte: 190},
		// categoria 2 ou 3
		cat: {in: [2, 3]}
	})
	.print('name', 'price');

// js book 31.00
// py book 29.00
// game 150.00

Filter

.filter( function )

Filtra os objetos no padrão array filter do Javascript.

Filter e find tem o mesmo efeito, porém filter permite qualquer, mas requer mais implementação.

Exemplo:

db(products)
	.filter(function(product) {
		// produtos com preço menor ou igual a 1 mil
		return product.price <= 1000;
	})
	// apenas os objetos que passaram pelo teste
	...

Join

.join( data , array [ 'LeftProp' , 'RightProp' ] , optional string 'appendTo' )
.join( data , array [ [ 'LeftProp' , 'RightProp' ] , ... ], optional string 'appendTo' )

Exemplo

var categories = [
	{id: 1, name: "computer"},
	{id: 2, name: "books"},
	{id: 3, name: "games"},
	{id: 4, name: "apple"},
	{id: 5, name: "car"}
];

db(products)
	// une categorias a produtos, onde o objeto categoria
	// é alocado na nova propriedade category
	.join(categories, ['cat', 'id'], 'category')

Left join

Quase o mesmo efeito de join, exceto que todos os objetos da esquerda (principal) são mantidos, mesmo que não tenham relacionamento a direita.

var categories = [
	{id: 1, name: "computer"}
];

db(products)
	// todos os produtos são mantidos
	// os produtos que não tiverem categoria correspondente
	// recebem null
	.left_join(categories, ['cat', 'id'], 'category');

Right join

Efeito contrário de left join, todos os objetos da direita são mantidos, mesmo que não possuam relacionamento à esquerda.

var categories = [
	{id: 1, name: "computer"},
	{id: 9, name: "Im New"}
];

db(products)
	.right_join(categories, ['cat', 'id'], 'category');

group

.group( arrayWithProp , options )

Agrupa os objetos por um ou mais critérios.

Exemplos:

db(products)
	// agrupa os produtos por categoria
	.group(['cat']);

// count
db(products)
	// cria a propriedade total com o total de itens agrupados
	.group(['cat'], {count: 'total'});

// appendTo
db(products)
	// move os produtos de mesmo critério
	// para uma nova propriedade (array)
	.group(['cat'], {appendTo: 'products'});

// sum
db(products)
	// soma os preços de produtos com a mesma categoria
	.group(['cat'], {sum: 'price'});

Sort

.sort({ prop: 'asc|desc', ... })

Ordena os objetos por uma ou mais valores. Cada definição deve receber ASC ou DESC.

Exemplo:

db(products)
	// ordena os produtos por categoria e preço
	.sort({cat: 'desc', price: 'asc'})
	.print('name', 'cat', 'price');

// game 3 150.00
// py book 2 29.00
// js book 2 31.00

Reverse

.reverse()

Inverte a ordem dos objetos.

Exemplo:

db(products)
	// ordena do menor preço ao maior
	.sort({price: 'asc'})
	// inverte a ordem, ocasiona no maior preço primeiro
	.reverse()
	.print()
	// inverte novamente, voltando ao estado original por sort
	.reverse()
	.print();

* Reverse e sort são independentes.

Slice

.slice( start , end )

Aplica o método slice do Javascript no array de objetos.

Exemplo:

db(products)
	.slice(-3, -1);

All

.all()

Retorna todos os objetos.

Exemplo:

db(products).all();

Get

.get( index )

Obtém um objeto pela sua posição.

Exemplo:

// primeiro objeto
db(products).get(0);

Size

Retorna a quantidade de objetos.

Exemplo:

// quantidade de objetos
db(products).size();

// comparativo com all e length
db(products).all().length;

Scope

.scope( function )

Obtém o escopo db em uma função.

Exemplo:

db(products)
	.scope(function() {
		// this é referente a db
		// você pode usar scope para aplicar
		// operações que dependem de valores externos
		
		if (externalVar) {
			this.sort({price: 'asc'});
		}
		
		if (anotherExternalVar) {
			this.group(['cat']);
		}
	})
	// dados modificados por sort e group
	...

Each

.each( function )

Obtém o escopo individual de cada objeto em uma função.

Exemplo:

db(products)
	.each(function() {
		// this é referente a cada objeto no array
		console.log(this.name);
		// você pode usar para modificar seus objetos
		this.lessthanthousand = this.price < 1000;
	})
	.find({
		lessthanthousand: {not: false}
	});

Clone

.clone()

Retorna uma nova instância db com os mesmo objetos.

Print

.print( [ prop, ... ] )

Imprime no console os objetos os apenas os valores das propriedades definidas por parâmetro.

db(products)
	// imprime todas as informações
	.print()
	// imprime apenas o nome e o preço
	.print('name', 'price');

Operadores

  • eq: igual
  • not: diferente
  • in: tem
  • nin: não tem
  • gt: maior
  • gte: maior ou igual
  • lt: menor
  • lte: menor ou igual
  • between: entre um intervalo
  • match: expressão regular

NPM Package: https://www.npmjs.com/package/jsdb

db.js é um projeto open-source. Você encontra o código fonte no GitHub. Sinta-se a vontade para colaborar.

https://github.com/Moraga/db.js

You may also like...