SlideShare uma empresa Scribd logo
1 de 107
Baixar para ler offline
Introdução
Mongo Shell
Operações básicas
Mais
Introdução ao MongoDB
Operações básicas
Elaine Naomi Watanabe
elainew@ime.usp.br
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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;i1000;i++){
atividades=[prova,projeto, exercícios];
for(j=0;j3;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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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çãse laranjasdo array de frutas e todos os elementos
cenourasdo array de legumes.
DCC-IME-USP MAC0439 - Lab. de Bancos de Dados 98 / 107
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
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
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
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
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
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
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
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
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

Mais conteúdo relacionado

Mais procurados

Curso mongo db com php
Curso mongo db com phpCurso mongo db com php
Curso mongo db com phpSuissa
 
Modelando aplicação em documento - MongoDB
Modelando aplicação em documento - MongoDBModelando aplicação em documento - MongoDB
Modelando aplicação em documento - MongoDBThiago Avelino
 
Minicurso Introdução ao mongoDB SCTI
Minicurso Introdução ao mongoDB SCTIMinicurso Introdução ao mongoDB SCTI
Minicurso Introdução ao mongoDB SCTIBruna Pereira
 
MongoDB - Tudo o que você precisa saber - FISL16
MongoDB - Tudo o que você precisa saber - FISL16MongoDB - Tudo o que você precisa saber - FISL16
MongoDB - Tudo o que você precisa saber - FISL16Christiano Anderson
 
Desenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDBDesenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDBAri Stopassola Junior
 
MongoDB Schema Design - Latinoware 2014
MongoDB Schema Design - Latinoware 2014MongoDB Schema Design - Latinoware 2014
MongoDB Schema Design - Latinoware 2014Christiano Anderson
 
Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7Christiano Anderson
 
Mais um comparativo MongoDB - Fernando Boaglio - abril.2014
Mais um comparativo MongoDB - Fernando Boaglio - abril.2014Mais um comparativo MongoDB - Fernando Boaglio - abril.2014
Mais um comparativo MongoDB - Fernando Boaglio - abril.2014Fernando Boaglio
 
Desenvolvendo soluções com banco de dados não relacional - MongoDB
Desenvolvendo soluções com banco de dados não relacional - MongoDBDesenvolvendo soluções com banco de dados não relacional - MongoDB
Desenvolvendo soluções com banco de dados não relacional - MongoDBiMasters
 
Como o elasticsearch salvou minhas buscas
Como o elasticsearch salvou minhas buscasComo o elasticsearch salvou minhas buscas
Como o elasticsearch salvou minhas buscasWaldemar Neto
 
Elasticsearch: Motor de busca e além. Lições aprendidas criando Tu Próximo...
Elasticsearch: Motor de busca e além. Lições aprendidas criando Tu Próximo...Elasticsearch: Motor de busca e além. Lições aprendidas criando Tu Próximo...
Elasticsearch: Motor de busca e além. Lições aprendidas criando Tu Próximo...Miguel Gallardo
 

Mais procurados (20)

NoSQL e MongoDB
NoSQL e MongoDBNoSQL e MongoDB
NoSQL e MongoDB
 
Curso mongo db com php
Curso mongo db com phpCurso mongo db com php
Curso mongo db com php
 
Modelando aplicação em documento - MongoDB
Modelando aplicação em documento - MongoDBModelando aplicação em documento - MongoDB
Modelando aplicação em documento - MongoDB
 
Minicurso Introdução ao mongoDB SCTI
Minicurso Introdução ao mongoDB SCTIMinicurso Introdução ao mongoDB SCTI
Minicurso Introdução ao mongoDB SCTI
 
MongoDB - Tudo o que você precisa saber - FISL16
MongoDB - Tudo o que você precisa saber - FISL16MongoDB - Tudo o que você precisa saber - FISL16
MongoDB - Tudo o que você precisa saber - FISL16
 
Desenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDBDesenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDB
 
#1 Introdução ao MongoDB
#1   Introdução ao MongoDB#1   Introdução ao MongoDB
#1 Introdução ao MongoDB
 
Python e MongoDB - Ensol
Python e MongoDB - EnsolPython e MongoDB - Ensol
Python e MongoDB - Ensol
 
MongoDB Schema Design - Latinoware 2014
MongoDB Schema Design - Latinoware 2014MongoDB Schema Design - Latinoware 2014
MongoDB Schema Design - Latinoware 2014
 
Meetup MUG-RS KingHost
Meetup MUG-RS KingHostMeetup MUG-RS KingHost
Meetup MUG-RS KingHost
 
#3 Instalação MongoDB
#3   Instalação MongoDB  #3   Instalação MongoDB
#3 Instalação MongoDB
 
2011 01-18 mongo-db
2011 01-18 mongo-db2011 01-18 mongo-db
2011 01-18 mongo-db
 
Mongo + php
Mongo + phpMongo + php
Mongo + php
 
Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7
 
Mais um comparativo MongoDB - Fernando Boaglio - abril.2014
Mais um comparativo MongoDB - Fernando Boaglio - abril.2014Mais um comparativo MongoDB - Fernando Boaglio - abril.2014
Mais um comparativo MongoDB - Fernando Boaglio - abril.2014
 
Desenvolvendo soluções com banco de dados não relacional - MongoDB
Desenvolvendo soluções com banco de dados não relacional - MongoDBDesenvolvendo soluções com banco de dados não relacional - MongoDB
Desenvolvendo soluções com banco de dados não relacional - MongoDB
 
Palestra MongoDB
Palestra MongoDBPalestra MongoDB
Palestra MongoDB
 
Como o elasticsearch salvou minhas buscas
Como o elasticsearch salvou minhas buscasComo o elasticsearch salvou minhas buscas
Como o elasticsearch salvou minhas buscas
 
Treinamento Elasticsearch - Parte 2
Treinamento Elasticsearch - Parte 2Treinamento Elasticsearch - Parte 2
Treinamento Elasticsearch - Parte 2
 
Elasticsearch: Motor de busca e além. Lições aprendidas criando Tu Próximo...
Elasticsearch: Motor de busca e além. Lições aprendidas criando Tu Próximo...Elasticsearch: Motor de busca e além. Lições aprendidas criando Tu Próximo...
Elasticsearch: Motor de busca e além. Lições aprendidas criando Tu Próximo...
 

Semelhante a Introdução ao MongoDB

Mongo Db - PHP Day Workshop
Mongo Db - PHP Day WorkshopMongo Db - PHP Day Workshop
Mongo Db - PHP Day WorkshopDiego Sana
 
Desenvolvendo com Node.JS - Mongoose + MongoDB + Vue.JS
Desenvolvendo com Node.JS - Mongoose + MongoDB + Vue.JSDesenvolvendo com Node.JS - Mongoose + MongoDB + Vue.JS
Desenvolvendo com Node.JS - Mongoose + MongoDB + Vue.JSRomulo Fagundes
 
NoSQL com Zend Framework 2
NoSQL com Zend Framework 2NoSQL com Zend Framework 2
NoSQL com Zend Framework 2Flávio Lisboa
 
MongoDB - Performance e Escalabilidade para aplicações web
MongoDB - Performance e Escalabilidade para aplicações webMongoDB - Performance e Escalabilidade para aplicações web
MongoDB - Performance e Escalabilidade para aplicações webRafael Nunes
 
Mongodb praquer-usar-uaijugcloudday2014
Mongodb praquer-usar-uaijugcloudday2014Mongodb praquer-usar-uaijugcloudday2014
Mongodb praquer-usar-uaijugcloudday2014Rogerio Fontes
 
Utilizando NoSQL no desenvolvimento de soluções inteligentes
Utilizando NoSQL no desenvolvimento de soluções inteligentesUtilizando NoSQL no desenvolvimento de soluções inteligentes
Utilizando NoSQL no desenvolvimento de soluções inteligentesChristiano Anderson
 
Treinamento Básico Sobre ASP.NET MVC
Treinamento Básico Sobre ASP.NET MVCTreinamento Básico Sobre ASP.NET MVC
Treinamento Básico Sobre ASP.NET MVCMichael Costa
 
BANCO DE DADOS MONGODB VS BANCO DE DADOS SQL SERVER 2008
BANCO DE DADOS MONGODB VS BANCO DE DADOS SQL SERVER 2008BANCO DE DADOS MONGODB VS BANCO DE DADOS SQL SERVER 2008
BANCO DE DADOS MONGODB VS BANCO DE DADOS SQL SERVER 2008CharlesAlfenasmg
 
Desenvolvimento de WebServices RESTful com NodeJS e MongoDB
Desenvolvimento de WebServices RESTful com NodeJS e MongoDBDesenvolvimento de WebServices RESTful com NodeJS e MongoDB
Desenvolvimento de WebServices RESTful com NodeJS e MongoDBWebSix
 
37 consultando tabelas_com_sql_no_sql_server
37 consultando tabelas_com_sql_no_sql_server37 consultando tabelas_com_sql_no_sql_server
37 consultando tabelas_com_sql_no_sql_serverArt IT
 
TDC2016SP - Trilha .NET
TDC2016SP - Trilha .NETTDC2016SP - Trilha .NET
TDC2016SP - Trilha .NETtdc-globalcode
 
37 consultando tabelas_com_sql_no_sql_server
37 consultando tabelas_com_sql_no_sql_server37 consultando tabelas_com_sql_no_sql_server
37 consultando tabelas_com_sql_no_sql_serverJosé Henrique Sento Sé
 
NoSQL, MongoDB e MEAN
NoSQL, MongoDB e MEANNoSQL, MongoDB e MEAN
NoSQL, MongoDB e MEANOsmar Petry
 

Semelhante a Introdução ao MongoDB (20)

Mongo Db - PHP Day Workshop
Mongo Db - PHP Day WorkshopMongo Db - PHP Day Workshop
Mongo Db - PHP Day Workshop
 
Desenvolvendo com Node.JS - Mongoose + MongoDB + Vue.JS
Desenvolvendo com Node.JS - Mongoose + MongoDB + Vue.JSDesenvolvendo com Node.JS - Mongoose + MongoDB + Vue.JS
Desenvolvendo com Node.JS - Mongoose + MongoDB + Vue.JS
 
NoSQL com Zend Framework 2
NoSQL com Zend Framework 2NoSQL com Zend Framework 2
NoSQL com Zend Framework 2
 
MongoDB - Performance e Escalabilidade para aplicações web
MongoDB - Performance e Escalabilidade para aplicações webMongoDB - Performance e Escalabilidade para aplicações web
MongoDB - Performance e Escalabilidade para aplicações web
 
Mongodb praquer-usar-uaijugcloudday2014
Mongodb praquer-usar-uaijugcloudday2014Mongodb praquer-usar-uaijugcloudday2014
Mongodb praquer-usar-uaijugcloudday2014
 
Utilizando NoSQL no desenvolvimento de soluções inteligentes
Utilizando NoSQL no desenvolvimento de soluções inteligentesUtilizando NoSQL no desenvolvimento de soluções inteligentes
Utilizando NoSQL no desenvolvimento de soluções inteligentes
 
PHPMongoDB
PHPMongoDBPHPMongoDB
PHPMongoDB
 
Treinamento Básico Sobre ASP.NET MVC
Treinamento Básico Sobre ASP.NET MVCTreinamento Básico Sobre ASP.NET MVC
Treinamento Básico Sobre ASP.NET MVC
 
Aula1
Aula1Aula1
Aula1
 
mongodb.pdf
mongodb.pdfmongodb.pdf
mongodb.pdf
 
Workshop MongoDB
Workshop MongoDBWorkshop MongoDB
Workshop MongoDB
 
BANCO DE DADOS MONGODB VS BANCO DE DADOS SQL SERVER 2008
BANCO DE DADOS MONGODB VS BANCO DE DADOS SQL SERVER 2008BANCO DE DADOS MONGODB VS BANCO DE DADOS SQL SERVER 2008
BANCO DE DADOS MONGODB VS BANCO DE DADOS SQL SERVER 2008
 
Desenvolvimento de WebServices RESTful com NodeJS e MongoDB
Desenvolvimento de WebServices RESTful com NodeJS e MongoDBDesenvolvimento de WebServices RESTful com NodeJS e MongoDB
Desenvolvimento de WebServices RESTful com NodeJS e MongoDB
 
37 consultando tabelas_com_sql_no_sql_server
37 consultando tabelas_com_sql_no_sql_server37 consultando tabelas_com_sql_no_sql_server
37 consultando tabelas_com_sql_no_sql_server
 
TDC2016SP - Trilha .NET
TDC2016SP - Trilha .NETTDC2016SP - Trilha .NET
TDC2016SP - Trilha .NET
 
37 consultando tabelas_com_sql_no_sql_server
37 consultando tabelas_com_sql_no_sql_server37 consultando tabelas_com_sql_no_sql_server
37 consultando tabelas_com_sql_no_sql_server
 
#4 Primeiros comandos no MongoDB
#4   Primeiros comandos no MongoDB#4   Primeiros comandos no MongoDB
#4 Primeiros comandos no MongoDB
 
Crud
CrudCrud
Crud
 
Palestra
PalestraPalestra
Palestra
 
NoSQL, MongoDB e MEAN
NoSQL, MongoDB e MEANNoSQL, MongoDB e MEAN
NoSQL, MongoDB e MEAN
 

Mais de Elaine Naomi

Design de aplicações orientadas a objeto
Design de aplicações orientadas a objetoDesign de aplicações orientadas a objeto
Design de aplicações orientadas a objetoElaine Naomi
 
Sobre code smells, refactoring e design: como SOLID pode te ajudar no dia a dia
Sobre code smells, refactoring e design: como SOLID pode te ajudar no dia a diaSobre code smells, refactoring e design: como SOLID pode te ajudar no dia a dia
Sobre code smells, refactoring e design: como SOLID pode te ajudar no dia a diaElaine Naomi
 
Hacking Evening - Liskov Substitution Principle
Hacking Evening - Liskov Substitution PrincipleHacking Evening - Liskov Substitution Principle
Hacking Evening - Liskov Substitution PrincipleElaine Naomi
 
Code Smells: o que eles dizem sobre seu código?
Code Smells: o que eles dizem sobre seu código?Code Smells: o que eles dizem sobre seu código?
Code Smells: o que eles dizem sobre seu código?Elaine Naomi
 
Guru SP: Decodificando o code review
Guru SP: Decodificando o code reviewGuru SP: Decodificando o code review
Guru SP: Decodificando o code reviewElaine Naomi
 
Bootcamp de Rails - CaquiCoders Meetup
Bootcamp de Rails - CaquiCoders MeetupBootcamp de Rails - CaquiCoders Meetup
Bootcamp de Rails - CaquiCoders MeetupElaine Naomi
 
GURU SP - Design de aplicações orientadas a objeto
GURU SP - Design de aplicações orientadas a objetoGURU SP - Design de aplicações orientadas a objeto
GURU SP - Design de aplicações orientadas a objetoElaine Naomi
 
TDC SP 2019 - Decodificando o code review
TDC SP 2019 - Decodificando o code reviewTDC SP 2019 - Decodificando o code review
TDC SP 2019 - Decodificando o code reviewElaine Naomi
 
Além da programação funcional com Elixir e Erlang
Além da programação funcional com Elixir e ErlangAlém da programação funcional com Elixir e Erlang
Além da programação funcional com Elixir e ErlangElaine Naomi
 
Code review: o que isso diz sobre a cultura dos times de desenvolvimento?
Code review: o que isso diz sobre a cultura dos times de desenvolvimento?Code review: o que isso diz sobre a cultura dos times de desenvolvimento?
Code review: o que isso diz sobre a cultura dos times de desenvolvimento?Elaine Naomi
 
Explorando o Paralelismo em Workflows Intensivos em Dados com o Uso de Anotaç...
Explorando o Paralelismo em Workflows Intensivos em Dados com o Uso de Anotaç...Explorando o Paralelismo em Workflows Intensivos em Dados com o Uso de Anotaç...
Explorando o Paralelismo em Workflows Intensivos em Dados com o Uso de Anotaç...Elaine Naomi
 
Uso de Anotações Semânticas para Exploração de Paralelismo em Workflows Inten...
Uso de Anotações Semânticas para Exploração de Paralelismo em Workflows Inten...Uso de Anotações Semânticas para Exploração de Paralelismo em Workflows Inten...
Uso de Anotações Semânticas para Exploração de Paralelismo em Workflows Inten...Elaine Naomi
 
Dealing with a search engine in your application - a Solr approach for beginners
Dealing with a search engine in your application - a Solr approach for beginnersDealing with a search engine in your application - a Solr approach for beginners
Dealing with a search engine in your application - a Solr approach for beginnersElaine Naomi
 
Um Método para Paralelização Automática de Workflows Intensivos em Dados
Um Método para Paralelização Automática de Workflows Intensivos em DadosUm Método para Paralelização Automática de Workflows Intensivos em Dados
Um Método para Paralelização Automática de Workflows Intensivos em DadosElaine Naomi
 
O que é BIG DATA e como pode influenciar nossas vidas
O que é BIG DATA e como pode influenciar nossas vidasO que é BIG DATA e como pode influenciar nossas vidas
O que é BIG DATA e como pode influenciar nossas vidasElaine Naomi
 
Workflows científicos
Workflows científicosWorkflows científicos
Workflows científicosElaine Naomi
 
Algoritmos para economia de energia no escalonamento de workflows em nuvens c...
Algoritmos para economia de energia no escalonamento de workflows em nuvens c...Algoritmos para economia de energia no escalonamento de workflows em nuvens c...
Algoritmos para economia de energia no escalonamento de workflows em nuvens c...Elaine Naomi
 

Mais de Elaine Naomi (18)

Design de aplicações orientadas a objeto
Design de aplicações orientadas a objetoDesign de aplicações orientadas a objeto
Design de aplicações orientadas a objeto
 
Sobre code smells, refactoring e design: como SOLID pode te ajudar no dia a dia
Sobre code smells, refactoring e design: como SOLID pode te ajudar no dia a diaSobre code smells, refactoring e design: como SOLID pode te ajudar no dia a dia
Sobre code smells, refactoring e design: como SOLID pode te ajudar no dia a dia
 
Hacking Evening - Liskov Substitution Principle
Hacking Evening - Liskov Substitution PrincipleHacking Evening - Liskov Substitution Principle
Hacking Evening - Liskov Substitution Principle
 
Code Smells: o que eles dizem sobre seu código?
Code Smells: o que eles dizem sobre seu código?Code Smells: o que eles dizem sobre seu código?
Code Smells: o que eles dizem sobre seu código?
 
Guru SP: Decodificando o code review
Guru SP: Decodificando o code reviewGuru SP: Decodificando o code review
Guru SP: Decodificando o code review
 
Bootcamp de Rails - CaquiCoders Meetup
Bootcamp de Rails - CaquiCoders MeetupBootcamp de Rails - CaquiCoders Meetup
Bootcamp de Rails - CaquiCoders Meetup
 
GURU SP - Design de aplicações orientadas a objeto
GURU SP - Design de aplicações orientadas a objetoGURU SP - Design de aplicações orientadas a objeto
GURU SP - Design de aplicações orientadas a objeto
 
TDC SP 2019 - Decodificando o code review
TDC SP 2019 - Decodificando o code reviewTDC SP 2019 - Decodificando o code review
TDC SP 2019 - Decodificando o code review
 
Além da programação funcional com Elixir e Erlang
Além da programação funcional com Elixir e ErlangAlém da programação funcional com Elixir e Erlang
Além da programação funcional com Elixir e Erlang
 
Code review: o que isso diz sobre a cultura dos times de desenvolvimento?
Code review: o que isso diz sobre a cultura dos times de desenvolvimento?Code review: o que isso diz sobre a cultura dos times de desenvolvimento?
Code review: o que isso diz sobre a cultura dos times de desenvolvimento?
 
Explorando o Paralelismo em Workflows Intensivos em Dados com o Uso de Anotaç...
Explorando o Paralelismo em Workflows Intensivos em Dados com o Uso de Anotaç...Explorando o Paralelismo em Workflows Intensivos em Dados com o Uso de Anotaç...
Explorando o Paralelismo em Workflows Intensivos em Dados com o Uso de Anotaç...
 
Uso de Anotações Semânticas para Exploração de Paralelismo em Workflows Inten...
Uso de Anotações Semânticas para Exploração de Paralelismo em Workflows Inten...Uso de Anotações Semânticas para Exploração de Paralelismo em Workflows Inten...
Uso de Anotações Semânticas para Exploração de Paralelismo em Workflows Inten...
 
Dealing with a search engine in your application - a Solr approach for beginners
Dealing with a search engine in your application - a Solr approach for beginnersDealing with a search engine in your application - a Solr approach for beginners
Dealing with a search engine in your application - a Solr approach for beginners
 
Um Método para Paralelização Automática de Workflows Intensivos em Dados
Um Método para Paralelização Automática de Workflows Intensivos em DadosUm Método para Paralelização Automática de Workflows Intensivos em Dados
Um Método para Paralelização Automática de Workflows Intensivos em Dados
 
O que é BIG DATA e como pode influenciar nossas vidas
O que é BIG DATA e como pode influenciar nossas vidasO que é BIG DATA e como pode influenciar nossas vidas
O que é BIG DATA e como pode influenciar nossas vidas
 
Workflows científicos
Workflows científicosWorkflows científicos
Workflows científicos
 
Algoritmos para economia de energia no escalonamento de workflows em nuvens c...
Algoritmos para economia de energia no escalonamento de workflows em nuvens c...Algoritmos para economia de energia no escalonamento de workflows em nuvens c...
Algoritmos para economia de energia no escalonamento de workflows em nuvens c...
 
Qt Apresentação
Qt ApresentaçãoQt Apresentação
Qt Apresentação
 

Introdução ao MongoDB

  • 1. Introdução Mongo Shell Operações básicas Mais Introdução ao MongoDB Operações básicas Elaine Naomi Watanabe elainew@ime.usp.br 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;i1000;i++){ atividades=[prova,projeto, exercícios]; for(j=0;j3;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çãse laranjasdo array de frutas e todos os elementos cenourasdo 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