Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Introdução ao Mongo DB

Elaine Naomi
September 04, 2015

Introdução ao Mongo DB

Aula de introdução ao MongoDB baseada em tutoriais disponíveis na internet e no livro do Fernando Boaglio.

Elaine Naomi

September 04, 2015
Tweet

More Decks by Elaine Naomi

Other Decks in Education

Transcript

  1. Introdução Mongo Shell Operações básicas Mais Introdução ao MongoDB Operações

    básicas Elaine Naomi Watanabe [email protected] http://www.ime.usp.br/~elainew/ Profa. Dra. Kelly Rosa Braghetto Departamento de Ciência da Computação  Instituto de Matemática e Estatística Universidade de São Paulo Setembro/2015 DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 1 / 107
  2. Introdução Mongo Shell Operações básicas Mais Este material é baseado:

    Na documentação do MongoDB [MongoDB 2015b] Nas aulas do curso M101P - MongoDB for Developers [University 2015b] Nas aulas do curso M101J - MongoDB for Java Developers [University 2015a] Nas aulas do curso M102 - MongoDB for DBAs [University 2015c] No livro MongoDB - Construa novas aplicações com novas tecnologias de Fernando Boaglio [Boaglio 2015] DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 2 / 107
  3. Introdução Mongo Shell Operações básicas Mais MongoDB JSON BSON Características

    do MongoDB Componentes do MongoDB Nomenclatura no MongoDB Introdução DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 3 / 107
  4. Introdução Mongo Shell Operações básicas Mais MongoDB JSON BSON Características

    do MongoDB Componentes do MongoDB Nomenclatura no MongoDB O que é o MongoDB? Banco de dados não-relacional de documentos JSON (BSON) Open-source (https://github.com/mongodb/mongo) Possui um esquema exível (schemaless) Sua API de consulta é baseada em JavaScript Seu nome vem do inglês humongous ("gigantesco") DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 4 / 107
  5. Introdução Mongo Shell Operações básicas Mais MongoDB JSON BSON Características

    do MongoDB Componentes do MongoDB Nomenclatura no MongoDB O que é JSON? JSON [json.org 2015] JavaScript Object Notation [json.org 2015] Notação criada para o armazenamento e a troca de dados Baseada em JavaScript, mas armazenada como texto simples (plain text) Fácil de ser: lida e escrita por humanos analisada e gerada por máquinas É basicamente uma chave + um valor Ex.: {"chave":"valor"} DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 5 / 107
  6. Introdução Mongo Shell Operações básicas Mais MongoDB JSON BSON Características

    do MongoDB Componentes do MongoDB Nomenclatura no MongoDB Tipos de dados O padrão JSON aceita como valor os seguintes tipos de dados: strings numbers booleans(true/false) null arrays objects/documents DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 6 / 107
  7. Introdução Mongo Shell Operações básicas Mais MongoDB JSON BSON Características

    do MongoDB Componentes do MongoDB Nomenclatura no MongoDB Exemplo de JSON { "nome":"João", //string "idade":21, //number "eleitor":true, //boolean "escolaridade": null, //null "hobbies":["tênis","xadrez"], //array "endereço":{ "cidade":"São Paulo", "estado":"SP" } //object/document } Para visualizar arquivos json: http://jsonlint.com/ DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 7 / 107
  8. Introdução Mongo Shell Operações básicas Mais MongoDB JSON BSON Características

    do MongoDB Componentes do MongoDB Nomenclatura no MongoDB BSON (Binary JSON) BSON [BSON 2015] é uma representação binária do JSON, utilizada pelo MongoDB para armazenar seus documentos. É utilizado devido a: Rápida escaneabilidade (fast scanability ), ou seja, torna possível varrer um documento procurando um valor rapidamente. Novos tipos de dados (Date, ObjectId, Binary Data) Todo documento tem um campo chamado _id obrigatoriamente. Por padrão, é um campo do tipo ObjectId [MongoDB 2015c], mas pode ser denido como qualquer outro tipo de dado. DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 8 / 107
  9. Introdução Mongo Shell Operações básicas Mais MongoDB JSON BSON Características

    do MongoDB Componentes do MongoDB Nomenclatura no MongoDB Características do MongoDB O MongoDB foi projetado para ser escalável. Por isso, algumas funcionalidades NÃO foram incorporadas ao seu sistema, como: Junções (JOINs) entre coleções Transações ACID [Elmasri and Navathe 2014] DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 9 / 107
  10. Introdução Mongo Shell Operações básicas Mais MongoDB JSON BSON Características

    do MongoDB Componentes do MongoDB Nomenclatura no MongoDB Características do MongoDB E como viver em um mundo sem junções e transações? Aninhando documentos (embedded documents) Criando links articiais (textual, não é uma chave estrangeira) Lembrando que as operações de escritas são atômicas no nível de um único documento [MongoDB 2015a], mesmo quando uma operação modicar vários documentos. Atomicidade: as outras requisições para irão recuperar o documento já modicado completamente ou antes da modicação, nunca durante. DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 10 / 107
  11. Introdução Mongo Shell Operações básicas Mais MongoDB JSON BSON Características

    do MongoDB Componentes do MongoDB Nomenclatura no MongoDB Problemas? O que pode acontecer com os nossos dados? A consistência pode ser eventual Pode haver duplicação e inconsistência entre campos usados como links de documentos Em compensação, ganhamos desempenho e escalabilidade. A aplicação torna-se responsável pela integridade dos dados duplicados. DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 11 / 107
  12. Introdução Mongo Shell Operações básicas Mais MongoDB JSON BSON Características

    do MongoDB Componentes do MongoDB Nomenclatura no MongoDB Principais Componentes do MongoDB O MongoDB é composto (basicamente) por: mongo: cliente do MongoDB (Mongo Shell) mongod: servidor do MongoDB mongod --replSet "nomeReplica": servidor de réplica do MongoDB mongod --congsvr: serviço de conguração do particionamento de dados (ele processa as consultas do cliente e determina a localização dos dados) mongos: serviço de roteamento de consultas do cliente para o serviço de conguração do cluster Lista de drivers: http://docs.mongodb.org/ecosystem/drivers/ DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 12 / 107
  13. Introdução Mongo Shell Operações básicas Mais MongoDB JSON BSON Características

    do MongoDB Componentes do MongoDB Nomenclatura no MongoDB Relembrando... Sharding (Particionamento de dados): É um dos métodos utilizados para a obtenção de escalabilidade horizontal. O conjunto de dados é dividido em diferentes partes (shards) e essas partes são distribuídas em servidores distintos. ReplicaSet (Conjunto de Réplicas): É um grupo de servidores (mongod) que hospedam/armazenam o mesmo conjunto de dados. DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 13 / 107
  14. Introdução Mongo Shell Operações básicas Mais MongoDB JSON BSON Características

    do MongoDB Componentes do MongoDB Nomenclatura no MongoDB MongoDB x SQL MongoDB SQL Documentos Linhas Campos/chaves/atributos Colunas Coleções Tabelas DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 14 / 107
  15. Introdução Mongo Shell Operações básicas Mais Conectando ao Servidor Acessando

    o Help Executando Comandos JS Usando a API do MongoDB Mongo Shell DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 15 / 107
  16. Introdução Mongo Shell Operações básicas Mais Conectando ao Servidor Acessando

    o Help Executando Comandos JS Usando a API do MongoDB Conectando ao servidor $ mongo Caso o banco de dados não seja especicado na conexão, o mongo sempre se conectará ao banco de dados test. Além disso, por padrão, a autenticação do MongoDB não vem habilitada. DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 16 / 107
  17. Introdução Mongo Shell Operações básicas Mais Conectando ao Servidor Acessando

    o Help Executando Comandos JS Usando a API do MongoDB Conectando ao servidor da disciplina MAC0439 $ mongo db_NUSP --host data.ime.usp.br --port 25134 -u u_NUSP -p A senha é o seu NUSP. No banco de dados da disciplina, a autenticação está habilitada. Por isso, precisamos especicar o banco de dados de autenticação (normalmente o admin) ou um banco de dados que tenhamos acesso. DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 17 / 107
  18. Introdução Mongo Shell Operações básicas Mais Conectando ao Servidor Acessando

    o Help Executando Comandos JS Usando a API do MongoDB Trocando a senha use db_NUSP; db.runCommand( { updateUser: "u_NUSP", pwd: "new_passwd" } ) DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 18 / 107
  19. Introdução Mongo Shell Operações básicas Mais Conectando ao Servidor Acessando

    o Help Executando Comandos JS Usando a API do MongoDB Vendo seus privilégios use db_NUSP; db.runCommand( { usersInfo:"u_NUSP", showPrivileges:true } ); DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 19 / 107
  20. Introdução Mongo Shell Operações básicas Mais Conectando ao Servidor Acessando

    o Help Executando Comandos JS Usando a API do MongoDB Comando Descrição help Exibe os principais comandos do Mongo Shell show dbs Lista todos os BDs do servidor mongod show collections Lista todas as coleções de um BD use <db_name> Conecta ao BD especicado rs.help() Exibe os comandos relacionados ao ReplicaSet sh.help() Exibe os comandos relacionados a Sharding DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 20 / 107
  21. Introdução Mongo Shell Operações básicas Mais Conectando ao Servidor Acessando

    o Help Executando Comandos JS Usando a API do MongoDB O Help pode ser acessado em diferentes níveis no Mongo Shell: //geral help; //nível do banco de dados db.help(); //nível de uma coleção db.<nome_coleção>.help(); //nível do comando find() db.<nome_coleção>.find().help(); //definição de uma função db.<nome_coleção>.find <nome_coleção> é o nome da coleção dentro do banco de dados selecionado com use <nome_banco_de_dados> DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 21 / 107
  22. Introdução Mongo Shell Operações básicas Mais Conectando ao Servidor Acessando

    o Help Executando Comandos JS Usando a API do MongoDB A API do MongoDB é baseada em JavaScript. Por isso, podemos executar scripts js no Mongo Shell... for(i=0; i < 3; i++){ print ("hello, " + i); } DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 22 / 107
  23. Introdução Mongo Shell Operações básicas Mais Conectando ao Servidor Acessando

    o Help Executando Comandos JS Usando a API do MongoDB Podemos denir variáveis... var test = "abc"; print (test); test DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 23 / 107
  24. Introdução Mongo Shell Operações básicas Mais Conectando ao Servidor Acessando

    o Help Executando Comandos JS Usando a API do MongoDB Manipular dicionários (documentos JSON)... dict = {"a":1, "b":2}; dict dict.a dict["a"] w = "a" dict[w] DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 24 / 107
  25. Introdução Mongo Shell Operações básicas Mais Conectando ao Servidor Acessando

    o Help Executando Comandos JS Usando a API do MongoDB Criando um banco de dados chamado my_database (se o usuário tiver o privilégio para isso) use my_database DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 25 / 107
  26. Introdução Mongo Shell Operações básicas Mais Conectando ao Servidor Acessando

    o Help Executando Comandos JS Usando a API do MongoDB Exibindo o banco de dados em uso: //ponteiro para o banco de dados atual db; DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 26 / 107
  27. Introdução Mongo Shell Operações básicas Mais Conectando ao Servidor Acessando

    o Help Executando Comandos JS Usando a API do MongoDB Listando todos os banco de dados do servidor (conforme o privilégio do usuário): show dbs DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 27 / 107
  28. Introdução Mongo Shell Operações básicas Mais Conectando ao Servidor Acessando

    o Help Executando Comandos JS Usando a API do MongoDB Para criar coleções, basta inserir um documento à nova coleção. O comando abaixo cria uma nova coleção chamada minha_nova_colecao com o documento {a:1}. db.minha_nova_colecao.save({a:1}) DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 28 / 107
  29. Introdução Mongo Shell Operações básicas Mais Conectando ao Servidor Acessando

    o Help Executando Comandos JS Usando a API do MongoDB Ou podemos criar apenas a coleção: db.createCollection("minha_nova_colecao"); DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 29 / 107
  30. Introdução Mongo Shell Operações básicas Mais Conectando ao Servidor Acessando

    o Help Executando Comandos JS Usando a API do MongoDB Podemos organizar as coleções em grupos, criando namespaces para as coleções e utilizando a notação ponto (dot notation). Exemplo: db.mac0439.alunos.insert({"a":1}); db.createCollection("mac0439.alunos"); db.createCollection("mac0439.topicos"); DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 30 / 107
  31. Introdução Mongo Shell Operações básicas Mais Conectando ao Servidor Acessando

    o Help Executando Comandos JS Usando a API do MongoDB Para localizar o documento inserido, podemos usar os comando .nd() e .ndOne(): db.minha_nova_colecao.find({a:1}); db.minha_nova_colecao.findOne(); DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 31 / 107
  32. Introdução Mongo Shell Operações básicas Mais Conectando ao Servidor Acessando

    o Help Executando Comandos JS Usando a API do MongoDB Listando todas as coleções de um banco de dados: show collections; DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 32 / 107
  33. Introdução Mongo Shell Operações básicas Mais Conectando ao Servidor Acessando

    o Help Executando Comandos JS Usando a API do MongoDB Excluindo uma coleção: //exclui my_collection db.my_collection.drop(); DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 33 / 107
  34. Introdução Mongo Shell Operações básicas Mais Conectando ao Servidor Acessando

    o Help Executando Comandos JS Usando a API do MongoDB Excluindo um banco de dados: use my_db; //exclui my_db db.dropDatabase(); DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 34 / 107
  35. Introdução Mongo Shell Operações básicas Mais Conectando ao Servidor Acessando

    o Help Executando Comandos JS Usando a API do MongoDB Restrições O nome de um banco de dados NÃO pode: conter os seguintes caracteres no UNIX: /\ . "$ conter os seguintes caracteres no WINDOWS: /\. "$*<>:|? conter caracteres nulos ou ser vazio conter mais de 64 caracteres O nome de uma coleção NÃO pode: conter o caracter $ ou ser uma string vazia começar com o prexo system. (ele é reservado para o sistema) O nome de um campo (chave) NÃO pode: conter pontos (.) ou ser uma string vazia não pode começar com $ DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 35 / 107
  36. Introdução Mongo Shell Operações básicas Mais Conectando ao Servidor Acessando

    o Help Executando Comandos JS Usando a API do MongoDB Restrições Caso seja necessário usar o $ como nome de um atributo, veja: http://docs.mongodb.org/master/faq/developers/ #faq-dollar-sign-escaping. Cada documento JSON/BSON pode ter no máximo 16MB. Caso ultrapasse esse tamanho, utilize o GridFS: http://docs.mongodb.org/manual/core/gridfs/. Veja mais restrições em: http://docs.mongodb.org/master/reference/limits/. DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 36 / 107
  37. Introdução Mongo Shell Operações básicas Mais Conectando ao Servidor Acessando

    o Help Executando Comandos JS Usando a API do MongoDB Saindo do Mongo Shell: exit; DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 37 / 107
  38. Introdução Mongo Shell Operações básicas Mais Um documento no MongoDB

    Inserindo um documento Localizando documentos Atualizando documentos Excluindo documentos Operações básicas DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 38 / 107
  39. Introdução Mongo Shell Operações básicas Mais Um documento no MongoDB

    Inserindo um documento Localizando documentos Atualizando documentos Excluindo documentos CRUD SQL MongoDB Create Insert Insert Read Select Find Update Update Update Delete Delete Remove Não existe uma linguagem separada para descrever as operações de CRUD no MongoDB. As operaçõs existem como métodos/funções dentro da API. DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 39 / 107
  40. Introdução Mongo Shell Operações básicas Mais Um documento no MongoDB

    Inserindo um documento Localizando documentos Atualizando documentos Excluindo documentos Cada documento deve conter um id único associado, especicado pelo campo _id. Caso o usuário não especique um valor para esse campo, ele é gerado automaticamente pelo MongoDB, denido como um ObjectId(). O MongoDB cria também um índice para o campo _id, a m de tornar as consultas mais ecientes. DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 40 / 107
  41. Introdução Mongo Shell Operações básicas Mais Um documento no MongoDB

    Inserindo um documento Localizando documentos Atualizando documentos Excluindo documentos Inserindo um documento Protótipo: db.<nome_coleção>.insert(<json>) use db_NUSP; db.pessoas.insert({ "nome":"Maria", "profissão":"Estudante" }); db.pessoas.insert({ "nome":"Beatriz", "profissão":"Estudante" }); DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 41 / 107
  42. Introdução Mongo Shell Operações básicas Mais Um documento no MongoDB

    Inserindo um documento Localizando documentos Atualizando documentos Excluindo documentos Outra forma de inserir um documento: use db_NUSP; doc = {"nome":"Ana", "profissão":"Professora"} db.pessoas.insert(doc) DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 42 / 107
  43. Introdução Mongo Shell Operações básicas Mais Um documento no MongoDB

    Inserindo um documento Localizando documentos Atualizando documentos Excluindo documentos Explorando a ausência de esquema db.pessoas.insert({"a":1}); db.pessoas.insert( {"frutas": ["maçã", "banana", "mamão"] }); db.pessoas.insert({"alunos":["João", "Carlos"]}); db.pessoas.insert( {"alunos":[ {"nome":"Maria","profissão": "Estudante"}, {"nome":"Beatriz","profissão": "Estudante"} ]}); DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 43 / 107
  44. Introdução Mongo Shell Operações básicas Mais Um documento no MongoDB

    Inserindo um documento Localizando documentos Atualizando documentos Excluindo documentos Podemos especicar um _id (que será único na coleção): db.pessoas.insert({_id:1, a:1}) DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 44 / 107
  45. Introdução Mongo Shell Operações básicas Mais Um documento no MongoDB

    Inserindo um documento Localizando documentos Atualizando documentos Excluindo documentos Localizando documentos A condição, passada como parâmetro, é um documento JSON. //localiza todos db.pessoas.find(); db.pessoas.find({}); //localiza conforme um critério de busca db.pessoas.find({"nome":"Maria"}) db.pessoas.find({"nome":"Maria", "profissão":"Estudante"}) Todos os parâmetros passados para as funções da API são documentos JSON. DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 45 / 107
  46. Introdução Mongo Shell Operações básicas Mais Um documento no MongoDB

    Inserindo um documento Localizando documentos Atualizando documentos Excluindo documentos Localizando documentos Projeção: selecionando atributos/campos a serem exibidos no resultado. //localiza conforme um critério de busca db.pessoas.find({"nome":"Maria"}, {"nome":1}); db.pessoas.find({"nome":"Maria"}, {_id:0, "nome":1}); db.pessoas.find({"nome":"Maria"}, {_id:false, "nome":true}); Todos os parâmetros passados para as funções da API são documentos JSON. DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 46 / 107
  47. Introdução Mongo Shell Operações básicas Mais Um documento no MongoDB

    Inserindo um documento Localizando documentos Atualizando documentos Excluindo documentos E como localizar documentos aninhados e arrays? Temos, por exemplo: {"frutas":["maçã", "banana", "mamão"]} {"alunos":[ {"nome":"Maria","profissão": "Estudante"}, {"nome":"Beatriz","profissão": "Estudante"} ]} DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 47 / 107
  48. Introdução Mongo Shell Operações básicas Mais Um documento no MongoDB

    Inserindo um documento Localizando documentos Atualizando documentos Excluindo documentos Usaremos a notação ponto (dot-notation): db.pessoas.find({"frutas":"maçã"}); db.pessoas.find({"alunos.nome":"Beatriz"}); DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 48 / 107
  49. Introdução Mongo Shell Operações básicas Mais Um documento no MongoDB

    Inserindo um documento Localizando documentos Atualizando documentos Excluindo documentos .ndOne() retorna apenas o primeiro documento da lista de documentos que seriam o resultado. É equivalente a .nd().limit(1). //retornando o primeiro documento de uma coleção db.pessoas.findOne(); db.pessoas.find().limit(1); //adicionando uma condição db.pessoas.findOne({"profissão":"Estudante"}); db.pessoas.find({"profissão":"Estudante" }).limit(1).pretty(); db.pessoas.find({"profissão":"Estudante" }).limit(1).toArray(); DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 49 / 107
  50. Introdução Mongo Shell Operações básicas Mais Um documento no MongoDB

    Inserindo um documento Localizando documentos Atualizando documentos Excluindo documentos //projeção do resultado db.pessoas.findOne({"profissão":"Estudante"}, {nome:true}); db.pessoas.find({"profissão":"Estudante"}, {nome:true}).limit(1).pretty(); db.pessoas.find({"profissão":"Estudante"}, {nome:true}).limit(1).toArray(); DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 50 / 107
  51. Introdução Mongo Shell Operações básicas Mais Um documento no MongoDB

    Inserindo um documento Localizando documentos Atualizando documentos Excluindo documentos Criando uma nova coleção com mais documentos: for(i=0;i<1000;i++){ atividades=["prova","projeto", "exercícios"]; for(j=0;j<3;j++){ db.notas.insert({"estudante":i, "tipo": atividades[j], nota: Math.round(Math.random()*100)}); } } Pronto! 3000 documentos inseridos! DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 51 / 107
  52. Introdução Mongo Shell Operações básicas Mais Um documento no MongoDB

    Inserindo um documento Localizando documentos Atualizando documentos Excluindo documentos Cursores Um cursor permite que você navegue por um conjunto de dados. Permite que limitemos, por ex., a lista de documentos em uma consulta: //limitando db.notas.find().limit(5) //exibindo de modo "legível" db.notas.find().limit(5).pretty(); db.notas.find().limit(5).toArray(); DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 52 / 107
  53. Introdução Mongo Shell Operações básicas Mais Um documento no MongoDB

    Inserindo um documento Localizando documentos Atualizando documentos Excluindo documentos É possível exibir os valores de um cursor, um a um: var myCursor = db.notas.find( { tipo: 'prova' } ); while (myCursor.hasNext()) { printjson(myCursor.next()); } //ou myCursor.forEach(printjson); DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 53 / 107
  54. Introdução Mongo Shell Operações básicas Mais Um documento no MongoDB

    Inserindo um documento Localizando documentos Atualizando documentos Excluindo documentos Outros exemplos: var myCursor = db.notas.find( { tipo: 'prova' } ); var documentArray = myCursor.toArray(); var myDocument = documentArray[3]; myDocument; myCursor.toArray() [3]; //equivalente DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 54 / 107
  55. Introdução Mongo Shell Operações básicas Mais Um documento no MongoDB

    Inserindo um documento Localizando documentos Atualizando documentos Excluindo documentos Podemos manipular o cursor da nossa consulta, exibindo, por ex., os resultados de 5 em 5 documentos. Manualmente fazendo isso: //limitando db.notas.find().limit(5); db.notas.find().skip(5).limit(5); db.notas.find().skip(10).limit(5); Mais métodos: http: //docs.mongodb.org/manual/reference/method/js-cursor/ DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 55 / 107
  56. Introdução Mongo Shell Operações básicas Mais Um documento no MongoDB

    Inserindo um documento Localizando documentos Atualizando documentos Excluindo documentos Operadores $gt: verica se um atributo é maior que um valor $gte: verica se um atributo é maior ou igual que um valor $lt: verica se um atributo é menor que um valor $lte: verica se um atributo é menor ou igual que um valor $exists: verica se um atributo existe $type: verica se existe um atributo de um tipo determinado $regex: se o atributo corresponde à expressão regular $or: compara duas condições com o operador ou $and: compara duas condições com o operador and $in: verica se um atributo contém um dos valores de um array $all: verica se um atributo contém todos os valores de um array DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 56 / 107
  57. Introdução Mongo Shell Operações básicas Mais Um documento no MongoDB

    Inserindo um documento Localizando documentos Atualizando documentos Excluindo documentos Operadores $gt, $gte, $lt, $lte $gt, $gte, $lt, $lte: {campo: {$operador:valor}} db.notas.find({nota:{$gt:95}) db.notas.find({nota:{$gte:95, $lte:98}, tipo:"exercicio"}) db.notas.find({score:{$lt:95}) DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 57 / 107
  58. Introdução Mongo Shell Operações básicas Mais Um documento no MongoDB

    Inserindo um documento Localizando documentos Atualizando documentos Excluindo documentos Comparando strings com $gt, $gte, $lt, $lte Suponha que tenhamos a seguinte coleção: db.pessoas.insert({nome:"Ana"}); db.pessoas.insert({nome:"Beatriz"}); db.pessoas.insert({nome:"Carlos"}); db.pessoas.insert({nome:"Daniel"}); db.pessoas.insert({nome:"Érica", "idade":20, "profissão":"estudante"}); db.pessoas.insert({nome:"Fernando", "idade":30, "profissão":"web developer"}); db.pessoas.insert({nome:42}); DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 58 / 107
  59. Introdução Mongo Shell Operações básicas Mais Um documento no MongoDB

    Inserindo um documento Localizando documentos Atualizando documentos Excluindo documentos Caso use os comparadores para strings, eles só analisarão chaves do valores do tipo string, ignorando os números. Os valores são ordenados conforme o padrão UTF-8. db.pessoas.find({nome:{$lt:"D"}}); //de A a C db.pessoas.find({nome:{$lt:"D", $gt:"B"}}); //C DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 59 / 107
  60. Introdução Mongo Shell Operações básicas Mais Um documento no MongoDB

    Inserindo um documento Localizando documentos Atualizando documentos Excluindo documentos Operadores $exists e $type $exists: retorna os documentos que contenha o atributo especicado. db.pessoas.find({"profissão":{$exists:true}}); $type: retorna os documentos cujo atributo seja do tipo especicado (de acordo com a notação BSON). db.pessoas.find({nome:{$type:2}}); DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 60 / 107
  61. Introdução Mongo Shell Operações básicas Mais Um documento no MongoDB

    Inserindo um documento Localizando documentos Atualizando documentos Excluindo documentos Número Tipo 1 Double 2 String 3 Object 4 Array 5 Binary Data 6 Undened (Deprecated) 7 Object id 8 Boolean 9 Date 10 Null Ver lista completa: http://docs.mongodb.org/manual/ reference/operator/query/type/ DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 61 / 107
  62. Introdução Mongo Shell Operações básicas Mais Um documento no MongoDB

    Inserindo um documento Localizando documentos Atualizando documentos Excluindo documentos Lembrando que não existe, em JSON, chave sem um valor (mesmo que nulo) e que um documento será sempre composto por uma chave e um valor. Não esqueçam de colocar o símbolo {}. Exemplos inválidos: {"chave"}, {"chave":operador:10}, "chave" Exemplos válidos: {"chave":null},{"chave":"conteudo"}, {"chave":{operador:10}} DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 62 / 107
  63. Introdução Mongo Shell Operações básicas Mais Um documento no MongoDB

    Inserindo um documento Localizando documentos Atualizando documentos Excluindo documentos $regex: retorna os documentos que satisfazem a expressão regular // nomes que possuam a letra a em qualquer posição // Em SQL... WHERE (nome like %a%) db.pessoas.find({"nome":{$regex:"a"}}); // nomes que terminem com a // Em SQL... WHERE (nome like %A) db.pessoas.find({nome:{$regex:"a\$"}}); // nomes que comecem com A // Em SQL... WHERE (nome like A%) db.pessoas.find({nome:{$regex:"^A"}}); DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 63 / 107
  64. Introdução Mongo Shell Operações básicas Mais Um documento no MongoDB

    Inserindo um documento Localizando documentos Atualizando documentos Excluindo documentos Tutoriais sobre REGEX: http://aurelio.net/regex/guia/ http://regexone.com/ DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 64 / 107
  65. Introdução Mongo Shell Operações básicas Mais Um documento no MongoDB

    Inserindo um documento Localizando documentos Atualizando documentos Excluindo documentos $or: retorna todos os documentos que atendam a uma duas condições. db.estoque.find({$or: [{qtde: {$lt: 20}}, {preço: 10}]}) DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 65 / 107
  66. Introdução Mongo Shell Operações básicas Mais Um documento no MongoDB

    Inserindo um documento Localizando documentos Atualizando documentos Excluindo documentos $and: retorna todos os documentos que atendam às duas condições. //explicitamente (reparem no []) db.pessoas.find( { $and: [ { nome: { $gt: "C"} }, { nome: { $regex: "a"} } ] } ); //implicitamente db.pessoas.find( { nome: { $gt: "C", $regex: "a"}}); //explicitamente (reparem no []) db.notas.find( { $and: [ { nota: { $gt: 50} }, { tipo: "prova"} ] } ); //implicitamente db.notas.find( { nota: { $gt: 50}, tipo:"prova"}}); DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 66 / 107
  67. Introdução Mongo Shell Operações básicas Mais Um documento no MongoDB

    Inserindo um documento Localizando documentos Atualizando documentos Excluindo documentos Mas, tome cuidado! Observe essa seguinte consulta: db.notas.find({nota:{ $gt : 50 }, nota:{$lt : 60}}); Um documento cuja nota seja 40, será retornado? DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 67 / 107
  68. Introdução Mongo Shell Operações básicas Mais Um documento no MongoDB

    Inserindo um documento Localizando documentos Atualizando documentos Excluindo documentos Combinando $or e $and: db.estoque.find( { $and : [ { $or : [{preço: 0.99},{preço: 1.99}]}, { $or : [ {a_venda : true}, { qtde:{$lt:20}}]} ] } ) DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 68 / 107
  69. Introdução Mongo Shell Operações básicas Mais Um documento no MongoDB

    Inserindo um documento Localizando documentos Atualizando documentos Excluindo documentos Considere os seguintes documentos: db.pessoas.insert({name:"João", favoritos:["refrigerante","pizza"]}); db.pessoas.insert({name:"Pedro", favoritos:["sorvete","pizza"]}); db.pessoas.insert({name:"Luís", favoritos:["pizza","pipoca", "refrigerante"]}); DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 69 / 107
  70. Introdução Mongo Shell Operações básicas Mais Um documento no MongoDB

    Inserindo um documento Localizando documentos Atualizando documentos Excluindo documentos Como poderíamos fazer buscas em favoritos (array)? $in: retorna todos os documentos cujo atributo contenha pelo menos um dos valores especicados no array $all: retorna todos os documentos cujo atributo contenha todos os valores especicados no array DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 70 / 107
  71. Introdução Mongo Shell Operações básicas Mais Um documento no MongoDB

    Inserindo um documento Localizando documentos Atualizando documentos Excluindo documentos // todos os documentos que tenham pizza como favorito db.pessoas.find({favoritos:"pizza"}); // retorna João, Pedro e Luís // todos os documentos que contenham pizza // OU refrigerante como favorito db.pessoas.find({favoritos: {$in:["pizza","refrigerante"]}}); // retorna João, Pedro e Luís // todos os documentos que contenham pizza // E refrigerante como favorito db.pessoas.find({favoritos: {$all:["pizza","refrigerante"]}});//Pedro e Luís DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 71 / 107
  72. Introdução Mongo Shell Operações básicas Mais Um documento no MongoDB

    Inserindo um documento Localizando documentos Atualizando documentos Excluindo documentos Outros operadores: $nin: seleciona documentos em que o valor do campo especicado não está no array ou documentos que não possuam o campo $eq: seleciona documentos em que o valor do campo é igual ao valor especicado. $ne: seleciona documentos em que o valor é diferente (not equal ) do valor especicado $not: operador NOT, seleciona documentos que não satisfazem a expressão especicada, incluindo documentos que não contenham o atributo especicado DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 72 / 107
  73. Introdução Mongo Shell Operações básicas Mais Um documento no MongoDB

    Inserindo um documento Localizando documentos Atualizando documentos Excluindo documentos $nor: seleciona os documentos que não satisfazem a lista de condições. Por exemplo: db.estoque.nd({ $nor: [ { preço: 1.99 }, { a_venda: true } ]}) Retorna os documentos: cujo preço não seja igual a 1.99 e atributo a_venda não seja true; cujo preço não seja igual a 1.99 e que não contenham o atributo a_venda; não contenham o atributo preço e o atributo a_venda seja diferente de true; não contenham o atributo preço ou a_venda. Mais informação em: https://docs.mongodb.org/manual/ reference/operator/query-comparison/ DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 73 / 107
  74. Introdução Mongo Shell Operações básicas Mais Um documento no MongoDB

    Inserindo um documento Localizando documentos Atualizando documentos Excluindo documentos Protótipo: db.<collection>.nd(<condição>).sort(<ordenação>) <ordenação>: {nomecampo: direção} Direção: ASC: 1 DESC: -1 db.notas.find().sort({"estudante":1}) db.notas.find().sort({"estudante":-1}) db.notas.find({tipo:"prova", nota:{$gte:50}}, {_id:0, estudante:1}).sort({"estudante":-1}) DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 74 / 107
  75. Introdução Mongo Shell Operações básicas Mais Um documento no MongoDB

    Inserindo um documento Localizando documentos Atualizando documentos Excluindo documentos .count(): conta o número de documentos retornados na consulta db.pessoas.count() db.pessoas.find().count() db.pessoas.find({"nome":"Ana"}).count() db.pessoas.find({"profissão":"Estudante"}).count() DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 75 / 107
  76. Introdução Mongo Shell Operações básicas Mais Um documento no MongoDB

    Inserindo um documento Localizando documentos Atualizando documentos Excluindo documentos .distinct(<atributo>): retorna os valores distintos para um atributo. Por exemplo, temos: db.estoque.insert({ "_id": 1, "prod": "A", "item": { "qtde": "111", "color": "red" }, "sizes": [ "P", "M" ] }); db.estoque.insert({ "_id": 2, "prod": "A", "item": { "qtde": "111", "color": "blue" }, "sizes": [ "M", "G" ] }); db.estoque.insert({ "_id": 3, "prod": "B", "item":{"qtde":"222", "color":"blue"},"sizes":"P"}); db.estoque.insert({ "_id": 4, "prod": "A", "item": { "qtde": "333", "color": "black" }, "sizes": [ "P" ] }); DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 76 / 107
  77. Introdução Mongo Shell Operações básicas Mais Um documento no MongoDB

    Inserindo um documento Localizando documentos Atualizando documentos Excluindo documentos E queremos saber o nome dos produtos em estoque. Usando distinct: db.estoque.distinct("prod"); DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 77 / 107
  78. Introdução Mongo Shell Operações básicas Mais Um documento no MongoDB

    Inserindo um documento Localizando documentos Atualizando documentos Excluindo documentos Atualização de documentos db.<nome_coleção>.update( <condição>, <doc_completo_ou_parcial>, { upsert: <boolean>, multi: <boolean>, writeConcern: <document> } ) DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 78 / 107
  79. Introdução Mongo Shell Operações básicas Mais Um documento no MongoDB

    Inserindo um documento Localizando documentos Atualizando documentos Excluindo documentos Atualizando documentos Podemos atualizar um documento inteiro ou parte de um ou mais documentos. Por padrão, uma operação de atualização modica apenas o primeiro documento que ela encontrar (que satisfaça a condição de busca). writeConcern: descreve o nível de garantia que o MongoDB deve fornecer para cada operação para que esta seja considerada "executada com sucesso". Dene, por exemplo, o número de réplicas que devem responder para o servidor mestre , armando que receberam a atualização de um documento. Ex: writeConcern:{w:'majority'} ou writeConcern: { w: 2, wtimeout: 5000 }. DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 79 / 107
  80. Introdução Mongo Shell Operações básicas Mais Um documento no MongoDB

    Inserindo um documento Localizando documentos Atualizando documentos Excluindo documentos Upsert: permite denir se um documento será adicionando à coleção, caso nenhum dos documentos existentes satisfaçam à condição de busca. Multi: permite controlar se o update (atualização) será aplicado a apenas um documento ou a todos que satisfaçam à condição de busca. Por padrão, upsert e multi são false. O atributo _id é o único que não pode ser sobreescrito. DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 80 / 107
  81. Introdução Mongo Shell Operações básicas Mais Um documento no MongoDB

    Inserindo um documento Localizando documentos Atualizando documentos Excluindo documentos Suponha que nossa coleção aula tem os seguintes documentos: db.aula.insert({_id:1, "a":1,"b":2}); db.aula.insert({_id:2, "a":2,"b":1}); E executamos: db.aula.update({"a":2},{"a":3}); O que acontece? Será que atualiza só o atributo a? O documento {"a":2,"b":1} será totalmente reescrito. O novo documento será {_id:2,"a":3}. DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 81 / 107
  82. Introdução Mongo Shell Operações básicas Mais Um documento no MongoDB

    Inserindo um documento Localizando documentos Atualizando documentos Excluindo documentos Para atualizar parcialmente um documento, podemos criar uma variável no Mongo Shell para reescrever ou adicionar um atributo de um documento. var myObj = db.aula.findOne({a:1}); myObj.c = 123; //adicionou um novo campo db.aula.update({_id:myObj._id},myObj); //ou var cursor = db.aula.find({a:1}).limit(1); var obj = cursor.next(); db.aula.update({_id:obj._id},obj); DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 82 / 107
  83. Introdução Mongo Shell Operações básicas Mais Um documento no MongoDB

    Inserindo um documento Localizando documentos Atualizando documentos Excluindo documentos Upsert: insere um novo documento (com os atributos do update) quando o critério de busca não for satisfeito por nenhum documento da coleção. db.pessoa.update( { nome: "André" }, { nome: "André", classificação: 1, nota: 100 }, { upsert: true } ) // se nenhum documento for encontrado, será inserido // {"nome":"André", "classificação":1, "nota":100} DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 83 / 107
  84. Introdução Mongo Shell Operações básicas Mais Um documento no MongoDB

    Inserindo um documento Localizando documentos Atualizando documentos Excluindo documentos Multi: se true, permite que todos os documentos da coleção, que satisfaçam a condição, sejam alterados. db.notas.update({nota:{$lt:50}}, {$set:{"recuperação":true}}, {multi:true}); DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 84 / 107
  85. Introdução Mongo Shell Operações básicas Mais Um documento no MongoDB

    Inserindo um documento Localizando documentos Atualizando documentos Excluindo documentos .save(): é uma função do mongo shell apenas, um atalho para upsert. Caso o documento não exista, insira-o. Senão, atualize-o. var myObj = db.aula.findOne(); //um documento myObj.y = 400; //adicionou um novo campo db.aula.save({_id:myObj._id},myObj); Para ver a denição, digite: db.aula.save DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 85 / 107
  86. Introdução Mongo Shell Operações básicas Mais Um documento no MongoDB

    Inserindo um documento Localizando documentos Atualizando documentos Excluindo documentos Outras formas de update Para atributos simples: $set: Dene um valor para um atributo especíco $unset: Remove um atributo especíco de um documento $inc: Incrementa o valor de um atributo $rename: Renomeia um atributo DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 86 / 107
  87. Introdução Mongo Shell Operações básicas Mais Um documento no MongoDB

    Inserindo um documento Localizando documentos Atualizando documentos Excluindo documentos Para arrays: $addToSet: Adic. elemento a um array se não existir $pop: Remove o primeiro ou último item de um array $pull: Remove de um array os valores especicados. $pullAll: Remove de um array todos os valores especicados. $push: Adic. um elemento a um array (mesmo se ele já existir) $pushAll: Adic. todos os elemento especicados a um array (deprecated ) Outros operadores: http: //docs.mongodb.org/manual/reference/operator/update/ DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 87 / 107
  88. Introdução Mongo Shell Operações básicas Mais Um documento no MongoDB

    Inserindo um documento Localizando documentos Atualizando documentos Excluindo documentos Operador $set e $unset Modicando apenas um atributo de um documento com $set: //adicionando db.aula.update({_id:2},{$set:{d:100}}); //alterando db.aula.update({_id:2},{$set:{d:200}}); Removendo um atributo com $unset: //removendo db.aula.update({_id:2},{$unset:{d:""}}); DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 88 / 107
  89. Introdução Mongo Shell Operações básicas Mais Um documento no MongoDB

    Inserindo um documento Localizando documentos Atualizando documentos Excluindo documentos Incrementando o valor de um atributo com $inc: db.funcionarios.update( {"_id" : 6124109} , { $inc: { "salario" : 1500}}); //Aumento de 1500 reais para o _id: 6124109! :) DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 89 / 107
  90. Introdução Mongo Shell Operações básicas Mais Um documento no MongoDB

    Inserindo um documento Localizando documentos Atualizando documentos Excluindo documentos $rename é utilizado para renomear atributos. É possível passar uma lista de atributos a serem renomeados. db.students.insert({_id:1, name:"Ana", nickname: "Aninha", celular:"99999-9999"}); db.students.update( { _id: 1 }, {$rename: {'nickname': 'alias', 'cell': 'mobile'}}); DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 90 / 107
  91. Introdução Mongo Shell Operações básicas Mais Um documento no MongoDB

    Inserindo um documento Localizando documentos Atualizando documentos Excluindo documentos E se precisamos modicar um elemento de um array? db.aula.insert({_id:3, a:[1,2,3,4]}); Podemos especicar a posição do array com a notação ponto. //a.2 é o terceiro elemento db.aula.update({_id:0},{$set:{"a.2":5}}); // E teríamos como resultado: // {_id:3,a:[1,2,5,4]} DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 91 / 107
  92. Introdução Mongo Shell Operações básicas Mais Um documento no MongoDB

    Inserindo um documento Localizando documentos Atualizando documentos Excluindo documentos Outras formas de manipular arrays Usando o $addToSet: db.aula.update( { _id: 1 }, { $addToSet: {letras: [ "c", "d" ] } } ); O que acontece se executarmos duas vezes? O documento {_id:1, letras:["c","d"]} não será modicado novamente. DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 92 / 107
  93. Introdução Mongo Shell Operações básicas Mais Um documento no MongoDB

    Inserindo um documento Localizando documentos Atualizando documentos Excluindo documentos E se usássemos o $push, seria: db.aula.update( { _id: 1 }, { $push: {letras: "e"}} ); O que aconteceria se executássemos duas vezes? O documento _id:1 seria: {_id:1, letras:["a","b","c", "d","e","e"]} DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 93 / 107
  94. Introdução Mongo Shell Operações básicas Mais Um documento no MongoDB

    Inserindo um documento Localizando documentos Atualizando documentos Excluindo documentos E se quiséssemos adicionar mais de um elemento ao array de uma vez? db.aula.update({_id:1}, {$pushAll:{letras:["f","g","h"]}}); O $pushAll também NÃO verica se o elemento já existe. DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 94 / 107
  95. Introdução Mongo Shell Operações básicas Mais Um documento no MongoDB

    Inserindo um documento Localizando documentos Atualizando documentos Excluindo documentos Para evitar a inserção de elementos repetidos em um update, podemos usar o operador $each + $addToSet. db.aula.update( { _id: 2 }, { $addToSet: {letras:{$each:[ "f", "g", "h" ]}}} ) DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 95 / 107
  96. Introdução Mongo Shell Operações básicas Mais Um documento no MongoDB

    Inserindo um documento Localizando documentos Atualizando documentos Excluindo documentos Removendo um valor de um array com $pull. Por exemplo, temos a seguinte coleção: db.lojas.insert({ _id: 1, frutas: [ "maçãs", "peras", "laranjas", "uvas", "bananas" ], legumes: [ "cenouras", "aipos", "abóboras", "cenouras" ] }); DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 96 / 107
  97. Introdução Mongo Shell Operações básicas Mais Um documento no MongoDB

    Inserindo um documento Localizando documentos Atualizando documentos Excluindo documentos db.lojas.insert({ _id: 2, frutas: [ "ameixas", "kiwis", "laranjas", "bananas", "maçãs" ], legumes: [ "brócolis", "abobrinhas", "cenouras", "cebolas" ] }); DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 97 / 107
  98. Introdução Mongo Shell Operações básicas Mais Um documento no MongoDB

    Inserindo um documento Localizando documentos Atualizando documentos Excluindo documentos Se executássemos... db.lojas.update( {}, {$pull: {frutas: {$in: ["maçãs","laranjas"]}, legumes: "cenouras" } }, {multi: true} ) Seria removido de todos os documentos todos os elementos "maçãs"e "laranjas"do array de frutas e todos os elementos "cenouras"do array de legumes. DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 98 / 107
  99. Introdução Mongo Shell Operações básicas Mais Um documento no MongoDB

    Inserindo um documento Localizando documentos Atualizando documentos Excluindo documentos $pushAll: remove todos os elementos que estejam dentro do array ou documento especicado. db.notas.insert({ _id: 1, notas:[0,2,5,5,1,0]}); db.notas.update({ _id: 1},{$pullAll:{notas:[0,5]}}); DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 99 / 107
  100. Introdução Mongo Shell Operações básicas Mais Um documento no MongoDB

    Inserindo um documento Localizando documentos Atualizando documentos Excluindo documentos Removendo elementos de um array com $pop: Podemos remover um elemento do nal: db.aula.update({_id:1},{$pop:{letras:1}}) ou do começo: db.aula.update({_id:1},{$pop:{letras:-1}}) DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 100 / 107
  101. Introdução Mongo Shell Operações básicas Mais Um documento no MongoDB

    Inserindo um documento Localizando documentos Atualizando documentos Excluindo documentos Excluindo documentos Protótipo: db.<nome_coleção>.remove(<condição>) Ao contrário do update, ele apaga TODOS os documentos que satisfaçam a condição. db.pessoas.remove({_id:100}) db.pessoas.remove({}) //apaga tudo! Dica: teste sempre a condição e veja quantos documentos são retornados. db.pessoas.find({_id:100}) db.pessoas.find({_id:100}).count() DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 101 / 107
  102. Introdução Mongo Shell Operações básicas Mais Veja mais em: https://www.mongodb.com/lp/misc/quick-reference-cards

    http://www.tutorialspoint.com/mongodb http://docs.mongodb.org/manual/reference/sql-comparison/ http://docs.mongodb.org/manual/reference/ sql-aggregation-comparison/ https://www.mongodb.com/compare/mongodb-mysql Material em: https://mega.nz/#F!OUcgXLaA!i0aHOInXGzh-1lw5vFiaFA DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 102 / 107
  103. Referências I Boaglio, F. (2015). MongoDB: Construa novas aplicações com

    novas tecnologias. Casa do Código. BSON (2015). Bson. http://bsonspec.org. Data de acesso: 04/07/2015. Elmasri, R. and Navathe, S. B. (2014). Fundamentals of database systems. Pearson. DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 103 / 107
  104. Referências II json.org (2015). Introducing json. http://json.org. Data de acesso:

    04/07/2015. MongoDB (2015a). Atomicity and transactions. http://docs.mongodb.org/v3.0/core/ write-operations-atomicity/. Data de acesso: 04/07/2015. DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 104 / 107
  105. Referências III MongoDB (2015b). The mongodb 3.0 manual. http://docs.mongodb.org/manual. Data

    de acesso: 04/07/2015. MongoDB (2015c). Objectid. http: //docs.mongodb.org/manual/reference/object-id/. Data de acesso: 04/07/2015. DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 105 / 107
  106. Referências IV University, M. (2015a). M101j - mongodb for java

    developers. https://university.mongodb.com/courses/M101J/about. Data de acesso: 04/07/2015. University, M. (2015b). M101p: Mongodb for developers. https://university.mongodb.com/courses/M101P/about. Data de acesso: 04/07/2015. DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 106 / 107
  107. Referências V University, M. (2015c). M102 - mongodb for dbas.

    https://university.mongodb.com/courses/M102/about. Data de acesso: 04/07/2015. DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 107 / 107