MongoDB - Iniciando e Conhecendo

1.499 visualizações

Publicada em

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

Publicada em: Tecnologia
0 comentários
1 gostou
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
1.499
No SlideShare
0
A partir de incorporações
0
Número de incorporações
107
Ações
Compartilhamentos
0
Downloads
36
Comentários
0
Gostaram
1
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

MongoDB - Iniciando e Conhecendo

  1. 1. Iniciando e conhecendo Edemilson Luiz Gonçalves ede.goncalves88@gmail.com https://www.facebook.com/edegoncalves
  2. 2. MONGODB • C++ • JSON/BSON • Replica • Sharding • GridFS • Aggregation Framework
  3. 3. Terminologia: MYSQL e MONGODB MYSQL DATABASE TABLE ROWS QUERY INDEX PARTITION MONGODB DATABASE COLLECTION DOCUMENT JSON QUERY INDEX SHARD
  4. 4. 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ção db.produtos.remove() // Limpa a coleção
  5. 5. 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);
  6. 6. 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);
  7. 7. 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.
  8. 8. 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.
  9. 9. 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
  10. 10. 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
  11. 11. 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.
  12. 12. 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
  13. 13. 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
  14. 14. 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)
  15. 15. 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.
  16. 16. 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
  17. 17. 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}})
  18. 18. 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})
  19. 19. 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
  20. 20. 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
  21. 21. 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
  22. 22. Í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")
  23. 23. 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á
  24. 24. REPLICA Replicação no mongodb é uma obrigação, quedas dos servidores e paradas bruscas do mongod podem corromper as coleções.
  25. 25. 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.
  26. 26. 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.
  27. 27. 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.
  28. 28. REFERÊNCIAS Documentação do MONGODB http://docs.mongodb.org/ BE MEAN - Jean Carlo Nascimento http://bemean.com.br/

×