mongodb - iniciando e conhecendo

28
Iniciando e conhecendo Edemilson Luiz Gonçalves [email protected] https://www.facebook.com/edegoncalves

Upload: edemilson-goncalves

Post on 25-May-2015

805 views

Category:

Technology


2 download

DESCRIPTION

Slide apresentado para usuários do MYSQL onde haverá a mudança da base de dados para MONGODB.

TRANSCRIPT

Page 1: MongoDB - Iniciando e Conhecendo

Iniciando e conhecendo

Edemilson Luiz Gonç[email protected] https://www.facebook.com/edegoncalves

Page 2: MongoDB - Iniciando e Conhecendo

MONGODB

• C++

• JSON/BSON

• Replica

• Sharding

• GridFS

• Aggregation Framework

Page 3: MongoDB - Iniciando e Conhecendo

Terminologia: MYSQL e MONGODB

MYSQL

DATABASE

TABLE

ROWS

QUERY

INDEX

PARTITION

MONGODB

DATABASE

COLLECTION

DOCUMENT JSON

QUERY

INDEX

SHARD

Page 4: MongoDB - Iniciando e Conhecendo

BANCO DE DADOS E COLEÇÃO

Selecionando o banco de dados que iremos utilizar:use bancodedados

Visualizando os nossos bancos de dados:show dbs

Executando comandos:db.colecao.comando()

ex:

db.produtos.drop() // Apaga a coleçãodb.produtos.remove() // Limpa a coleção

Page 5: MongoDB - Iniciando e Conhecendo

COMANDO INSERT

Inserimos um documento novo no Banco de dados utilizando o comando insert

$ db.pessoas.insert({"nome": "eduardo", "idade": 15, "saldo": 45.50})

Podemos utilizar valores que estão em variáveis

$ var pessoa1 = {"nome": "eduardo", "idade": 15, "saldo": 45.50};$ db.pessoas.insert(pessoa1);

Page 6: MongoDB - Iniciando e Conhecendo

COMANDO SAVE

Podemos recuperar um documento, fazer as modificações necessárias e salvá-lo novamente.

$ var pessoa1 = db.pessoas.findOne();$ pessoa1.idade = 16;$ db.pessoas.save(pessoa1);

Page 7: MongoDB - Iniciando e Conhecendo

COMANDO CURSOR

Todas as buscas feitas através do find() irá retornar um cursor, vamos repeti-lo para retirarmos os valores.

$ var cursor = db.pessoas.find();

A linguagem utilizada no mongodb é o javascript então vamos usar o comando forEach()

$ cursor.forEach(function(pessoa){printjson(data.nome)

})

O comando acima irá listar os nomes de todas as pessoas cadastradas em nossa coleção.

Page 8: MongoDB - Iniciando e Conhecendo

COMANDO FIND

Para realizar consultas no MongoDB utilizamos duas funções:

find() // Retorna um array, mesmo sendo apenas 1 documento.findOne() // Retorna um único documento.

A sintaxe para fazermos consultas é:

$ db.pessoas.find({clausulas}, {campos});

$ db.pessoas.findOne({clausulas}, {campos});

ex:

$ db.pessoas.findOne({"nome": "eduardo"}, {"idade": 1}) // Selecione apenas o campo idade.

$ db.pessoas.findOne({"nome": "eduardo"}, {"idade": 0}) // Selecione o documento sem o campo idade.

Page 9: MongoDB - Iniciando e Conhecendo

OPERADORES

$lt$ db.pessoas.find({"idade": {$lt: 18}})Retorna os documentos com valores menores que 18

$lte$ db.pessoas.find({"idade": {$lte: 18}})Retorna os documentos com valores menores ou igual a 18

$gt$ db.pessoas.find({"idade": {$gt: 18}})Retorna os documentos com valores maiores que 18

$gte$ db.pessoas.find({"idade": {$gte: 18}})Retorna os documentos com valores maiores ou igual a 18

Page 10: MongoDB - Iniciando e Conhecendo

OPERADORES

$or$ db.pessoas.find({"idade": 15, $or: [{"nome": "pedro"}, {"nome": "eduardo"}]})Buscamos um documentos em que a idade seja igual a 15 e o nome seja pedro ou eduardo

$nor$ db.pessoas.find({$nor: [{"nome": "pedro"}, {"nome": "eduardo"}]})Buscamos um documentos em que o nome NÃO seja pedro ou eduardo

$and$ db.pessoas.find({$and: [{"nome": "zeca"}, {"idade": {$lt: 15}}]})Buscamos um documento em que nome seja zeca E idade menor que 15

Page 11: MongoDB - Iniciando e Conhecendo

OPERADORES

Existem campos que contém um array e alguns operadores para utilizarmos neles

$ne$ db.pessoas.find({cursos: {$ne: "mysql"}})Buscamos dentro do campo cursos que é um array as pessoas que NÃO fizeram o curso de mysql

$in$ db.pessoas.find({cursos: {$in: ["mysql", "mongodb"]}})Buscamos as pessoas que fizeram o curso de mysql ou mongodb, lembrando que o $in espera sempre um array, mesmo que seja um único valor.

$nin$ db.pessoas.find({cursos: {$nin: ["mysql", "mongodb"]}})Retorna as pessoas que não fizeram curso de mysql ou mongodb. Documentos que nenhum valor do array foi encontrado.

Page 12: MongoDB - Iniciando e Conhecendo

OPERADORES

$exists$ db.pessoas.find({cursos: {$exists: 1}})Busco os documentos que tenham o campo cursos

$all$ db.pessoas.find({cursos: {$all: ["mysql", "mongodb"]}})Ele funciona da mesma forma que o operador $in, a diferença é que precisa existir todos os campos do array ou invés de apenas 1.

$size$ db.pessoas.find({cursos: {$size: 3}})Retorna os documentos no qual o tamanho do array corresponde ao procurado, nesse caso o tamanho do array é 3

Page 13: MongoDB - Iniciando e Conhecendo

COMANDO UPDATE

Comando utilizado para fazer alterações em 1 ou mais documentos da nossa coleção

A sintaxe para o comando update() é:$ db.pessoas.update(critério, obj, upsert, multi)

critério // nossas condições para que aja a alteração

obj // o que será alterado

upsert // caso não exista, criaremos um novo documento

multi // alteramos mais de 1 registro que se enquadre no nosso critério

Page 14: MongoDB - Iniciando e Conhecendo

OPERADORES DE MODIFICAÇÕES

Iremos utilizar os operadores de modificações para alterar valores nos documentos diretamente em nossa query do mongodb.

ex.

$ db.pessoas.update({criterios-busca}, {operador-modificacao}, upsert, multi)

Page 15: MongoDB - Iniciando e Conhecendo

OPERADORES DE MODIFICAÇÕES

$set$ db.pessoas.update({"nome": "eduardo"}, {$set: {saldo: 250.50}});Seta um novo valor ao saldo de eduardo.

$unset$ db.pessoas.update({"nome": "eduardo"}, {$unset: {saldo: 1}})Deleta o campo saldo do documento de eduardo

$inc$ db.pessoas.update({"nome": "eduardo"}, {$inc: {idade: 1}})Incrementa o valor no campo que se não existir ele irá criar e atribuir o valor, caso queira decrementar, basta passar o valor negativo.

$push$ db.pessoas.update({"nome": "eduardo"}, {$push: {categoria: "estudante"}})Adiciona ao campo categoria que é um array o valor estudante, caso o campo categoria não exista ele irá criá-lo e se existir e não for um array ele retornará uma mensagem de erro.

Page 16: MongoDB - Iniciando e Conhecendo

OPERADORES DE MODIFICAÇÕES

$pushAll$ db.pessoas.update({"nome": "eduardo"}, {$pushAll: {categoria: ["estudante", "estagiario"]}})Adiciona ao campo categoria todos os valores que estão dentro do array (estudante e estagiario), caso o campo categoria não exista ele irá criá-lo e se existir e não for um array ele retornará uma mensagem de erro.

$pull$ db.pessoas.update({"nome": "eduardo"}, {$pull: {categoria: "estudante"}})Remove o valor estudante do array categoria

$pullAll$ db.pessoas.update({"nome": "eduardo"}, {$pullAll: {categoria: ["estudante", "estagiario"]}})Remove todos os valores (estudante e categoria) do array categoria

Page 17: MongoDB - Iniciando e Conhecendo

COUNT

Da mesma forma que temos o operador count no mysql possuímos no mongodb.

Ex.

SELECT count(*) FROM pessoas$ db.pessoas.count()

SELECT count(*) FROM pessoas WHERE idade < 18$ db.pessoas.count({idade: {$lt: 18}})

Page 18: MongoDB - Iniciando e Conhecendo

ORDENAÇÃO

No mongodb podemos ordenar nossas consultas com o comando sort

Ex.

SELECT * FROM pessoas ORDER BY nome ASC$ db.pessoas.find().sort({nome: 1})

SELECT * FROM pessoas ORDER BY idade DESC$ db.pessoas.find().sort({idade: -1})

Page 19: MongoDB - Iniciando e Conhecendo

LIMIT

Colocaremos limites em nossas buscas

Ex.

SELECT * FROM pessoas ORDER BY nome ASC LIMIT 0,2$ db.pessoas.find().sort({nome: 1}).limit(2)

SELECT * FROM pessoas LIMIT 2 OFFSET 10$ db.pessoas.find().limit(2).skip(10)//Buscando 2 documentos ignorando os 10 primeiros encontrados

Page 20: MongoDB - Iniciando e Conhecendo

REMOVE

Para apagarmos um documento ou limpar totalmente uma coleção usamos os seguintes comando:

$ db.pessoas.remove({"nome": "eduardo"})Apago todos os documentos que tenham o nome eduardo

$ db.pessoas.remove()Apago todos os documentos

Page 21: MongoDB - Iniciando e Conhecendo

EXPLAIN

O comando explain é ótimo para auxiliá-lo na otimização de suas queries, da mesma forma que no mysql ele trás muitas informações importantes.

$ db.pessoas.find().explain()

"cursor" : "BasicCursor", //tipo de índice usado "isMultiKey" : false, // se índice múltiplo foi usado "n" : 6, // numero de documento encontrados na busca "nscannedObjects" : 6, // documentos escaneados "nscanned" : 6, // numero de documentos e índices escaneados "indexOnly" : false, // se a busca pode ser feita apenas pelo índice "nYields" : 0, // numero de vezes que esperou um lock de leitura "nChunkSkips" : 0, // numero de documento ignorados na migração de chunks de sharding "millis" : 0, // tempo de execução da query em milisegundos "indexBounds" : {} // faixa de busca usada

Page 22: MongoDB - Iniciando e Conhecendo

ÍNDICES

Para melhorarmos nossa consulta é preciso que índices sejam criados em nossas coleções, vale lembrar que nem sempre a criação de muitos índice melhoram a performance da busca em muitos casos eles acabam atrapalhando.

Para criamos um índice utilizamos o comando ensureIndex()$ db.pessoas.ensureIndex({nome: 1})

Para visualizarmos os índices da coleção utilizamos$ db.pessoas.getIndexes()

Para visualizarmos todos os índices do banco de dados utilizamos uma coleção do sistema$ db.system.indexes.find()

E para deletar um índice utilize o comando$ db.pessoas.dropIndex("nome_1")

Page 23: MongoDB - Iniciando e Conhecendo

RELACIONAMENTOS - DBREF

Por mais que o mongodb não seja um banco de dados relacional, existem algumas formar que podemos utilizar para relacionarmos os documentos.

Acrescentando o ObjectId no documento e depois realizamos uma segunda busca para retornar o documento relacionado ou podemos utilizar o DBRef que faz essa ligação de forma automática.

$ db.turma.insert({curso: "angularjs", aluno: {$ref: "pessoas", $id: "533b63f066b353505cb62bd2"}})$ db.turma.find().pretty(){ "_id" : ObjectId("533b8b5f66b353505cb62bd8"), "curso" : "angularjs", "aluno" : DBRef("pessoas", "533b63f066b353505cb62bd2")}

db.turma.find({"aluno.$id": "533b63f066b353505cb62bd2"}) // Buscamos a turma no qual o aluno está

Page 24: MongoDB - Iniciando e Conhecendo

REPLICA

Replicação no mongodb é uma obrigação, quedas dos servidores e paradas bruscas do mongod podem corromper as coleções.

Page 25: MongoDB - Iniciando e Conhecendo

SHARDING

Você irá dividir em partes seus dados e distribui-los entre seus nós, cada servidor de sharding configurado receberá dados levando em conta a shard key.

Page 26: MongoDB - Iniciando e Conhecendo

GRIDFS

GridFS é o sistema de arquivos do mongodb e deve ser usado quando precisamos armazenar aquivos maiores que 1mb.

Adicionando um arquivo

$ mongofiles -d nomedobanco put arquivo.mp3

Quando o arquivo é adicionado são criadas duas coleções uma fs.chunks que contém o binário do arquivo e outra fs.files que são as informações do arquivo como data de upload, nome e tamanho.

Page 27: MongoDB - Iniciando e Conhecendo

AGGREGATION FRAMEWORK

Após a versão 2.2 do mongodb os usuários podem realizar operações similares ao group by do mysql utilizando a agregação, é possível filtrar documentos, reduzir conjuntos, encontra valores mínimos e máximo ou agrupar documentos.

ex.

$ db.pessoas.aggregate({$group: {_id: "$idade", totalSaldo: {$sum: "$saldo"}}},{$match: {totalSaldo: {$gte: 100.5}}})

No aggregate quando for referenciar um campo é preciso que ele venha acompanhado com o $ como foi feito no campo idade e saldo.

Page 28: MongoDB - Iniciando e Conhecendo

REFERÊNCIAS

Documentação do MONGODBhttp://docs.mongodb.org/

BE MEAN - Jean Carlo Nascimentohttp://bemean.com.br/