• Nenhum resultado encontrado

Introdução ao MongoDB Parte 2 Operações de Modificação de Dados

N/A
N/A
Protected

Academic year: 2021

Share "Introdução ao MongoDB Parte 2 Operações de Modificação de Dados"

Copied!
33
0
0

Texto

(1)

MAC439 Laboratório de Bancos de Dados

Introdução ao MongoDB

Parte 2

Operações de Modificação de Dados

Kelly Rosa Braghetto

kellyrb@ime.usp.br

(2)

Funções para modificação de

documentos

Principais operações:

db.collection.insertOne()

db.collection.insertMany()

db.collection.updateOne()

db.collection.updateMany()

db.collection.replaceOne()

db.collection.deleteOne()

db.collection.deleteMany()

https://docs.mongodb.com/manual/crud/

(3)

Funções para modificação de

documentos

No MongoDB:

Todas as operações de modificação são aplicáveis a uma

só coleção por vez

Nas escritas, a atomicidade é em nível de documento

(ainda que a operação abranja mais de um documento por

vez)

(4)

Inserção de documentos

Forma geral dos comandos de criação:

db.<nome_coleção>.insertOne( { <documento> }, { writeConcern: <documento> } ); db.<nome_coleção>.insertMany( { [<documento>,<documento>, … ] }, { writeConcern: <documento>, ordered: <boolean> } );

Documento a ser inserido Parâmetros de configuração da inserção (opcionais) Documentos a serem inseridos Parâmetros de configuração da inserção (opcionais)

(5)

Inserção de documentos

Função: insertOne

● A função insertOne insere um documento em uma coleção no BD em uso ● O comando abaixo cria o documento de MAC0439 na coleção disciplinas:

db.disciplinas.insertOne( { _id: 1,

"codigo": "MAC0439", "nome": "Laboratório de Bancos de Dados", "creditos_aula": 4, "creditos_trabalho": 2,

"ativacao": ISODate("2017-01-01T00:00:00-03"),

"avaliacao": ["provas","exercícios","projetos"]});

● Resposta:

(6)

Criação de documentos

Função: insertMany

● A função insertMany vários documentos de uma só vez em uma coleção ● Exemplo:

db.disciplinas.insertMany(

[{ _id: 2,"codigo": "MAC0426", "nome": "Sistemas de Bancos de Dados"}, { _id: 3,"codigo": "MAC0110", "nome": "Introdução à Computação"},

{ _id: 4,"codigo": "MAC0216", "nome": "Técnicas de Programação I"} ]);

● Resposta:

(7)

Identificação de objetos

Todo documento em uma coleção deve ter, obrigatoriamente, um

campo chamado _id que funciona como chave primária para o

documento

O valor de _id pode ser de qualquer tipo de dado

– O valor de _id precisa ser único dentro da coleção, caso contrário

gerará um erro de chave duplicada na inserção

Se na criação de um documento o campo _id não for definido, o

MongoDB atribuirá um valor do tipo ObjectId para o campo

(8)

Criação automática de valor para _id

db.disciplinas.insertOne(

{ "codigo": "MAC0439", "nome": "Laboratório de Bancos de Dados", "creditos_aula": 4, "creditos_trabalho": 2, "ativacao": ISODate("2017-01-01T00:00:00-03"), "avaliacao": ["provas","exercícios","projetos"] }); ● Resposta: { "acknowledged" : true, "insertedId" : ObjectId("5ecad12b7d9a94b2e3ccf440") }

(9)

Criação de valor para _id com a

função ObjectId()

db.disciplinas.insertOne( { _id: ObjectId(),

"codigo": "MAC0439", "nome": "Laboratório de Bancos de Dados", "creditos_aula": 4, "creditos_trabalho": 2, "ativacao": ISODate("2017-01-01T00:00:00-03"), "avaliacao": ["provas","exercícios","projetos"] }); ● Resposta: { "acknowledged" : true, "insertedId" : ObjectId("5ecad4917d9a94b2e3ccf441") }

(10)

Identificação de objetos com

ObjectId

Um valor do tipo ObjectId ocupa 12 bytes:

4 bytes com o timestamp da criação do ID

5 bytes com um valor aleatório

3 bytes com um contador, iniciado com um valor aleatório

Essa combinação gera valores que, apesar de relativamente

pequenos, são únicos (para propósitos práticos) e ordenáveis

(11)

Identificação de objetos com

ObjectId

Ordenar documentos pelo campo _id quando ele contém valores do

tipo ObjectId é (quase) o mesmo que ordená-los por sua data e hora

de criação

A resolução do

relógio

do ObjectId é de apenas um segundo,

portanto não há garantia de ordem para valores de ObjectId

criados dentro de um mesmo segundo

Valores de ObjectIds são criados pelos nós clientes, que podem

ter relógios de sistema diferentes

(12)

Valores do tipo Date

(datas e horários)

●Valores do tipo Date são armazenados internamente pelo MongoDB como números

inteiros de 64 bits

●Para obter um objeto do tipo Date, usa-se a função ISODate() ou o construtor de Date ●Quando não se passa uma data no parâmetro, obtém-se a data e hora atual

db.disciplinas.insertOne(

{ "codigo": "MAC0439", "nome": "Laboratório de Bancos de Dados", "ativacao": ISODate("2017-01-01T00:00:00-03"),

"cadastro": ISODate() });

ou

db.disciplinas.insertOne(

{ "codigo": "MAC0439", "nome": "Laboratório de Bancos de Dados", "ativacao": new Date("2017-01-01T00:00:00-03"),

"cadastro": new Date()

(13)

Inserção de documentos

Parâmetro $writeConcern

O parâmetro writeConcern descreve o nível de garantia que o

MongoDB deve prover para que a operação de inserção seja

considerada "executada com sucesso".

Esse parâmetro define, por exemplo, o quórum de escrita – o número

de réplicas que devem responder para o nó primário do sistema

afirmando que receberam a atualização de um documento.

Exemplos:

writeConcern:{w:'majority'}

ou

writeConcern: { w: 2, wtimeout: 5000}

(14)

Inserção de documentos

Exemplo com $writeConcern e $ordered

db.disciplinas.insertMany(

[{ "codigo": "MAC0426", "nome": "Sistemas de Bancos de Dados"}, { "codigo": "MAC0110", "nome": "Introdução à Computação"},

{ "codigo": "MAC0216", "nome": "Técnicas de Programação I"}],

{writeConcern: { w: 1, wtimeout: 5000}, ordered: 1});

● O comando de inserção acima exige que a escrita seja confirmada em pelo

menos dois nós do sistema

– Para que ele possa ser executado com sucesso, o coleção disciplinas

precisa ter pelo menos duas réplicas

● Os documentos serão inseridos na mesma ordem em que aparecem no

(15)

Alteração de documentos

Forma geral do comando de alteração updateOne:

db.collection.updateOne( <condições de filtro>, <modificações>, { upsert: <boolean>, writeConcern: <document>, collation: <document>, arrayFilters: [ <condição1>, ... ], hint: <document|string>});

A estrutura do comando updateMany é similar

Critérios para a seleção do documento p/ alteração

Parâmetros de configuração da alteração (opcionais)

(16)

Alteração de documentos

Exemplo: função updateOne

Usa-se o operador $set para indicar as alterações a serem feitas no(s)

documento(s)

● Ex. 1: o comando abaixo altera (ou inclui, caso ele ainda não exista) o atributo

numero_creditos na disciplina de código MAC0216: db.disciplinas.updateOne(

{"codigo":"MAC0216"},

{$set:{"creditos_aula":6}} );

● Resposta:

{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }

(17)

Alteração de documentos

Exemplo: função updateMany

● Ex. 2: o comando abaixo altera (ou inclui, caso ele ainda não exista) o atributo

numero_creditos nas disciplinas que têm MAC no prefixo do código

db.disciplinas.updateMany(

{"codigo":/^MAC/},

{$set:{"creditos_aula":6}}

);

● Resposta:

(18)

Operadores para a alteração de

campos de um documento

Podem ser usados dentro dos comandos updateOne e updateMany:

– $set: atribui valor a campos

– $unset: remove campos do documento – $rename: renomeia campos

– $inc: incrementa o valor de campos adicionando um dado valor – $mul: multiplica o valor de campos por um dado valor

– $currentDate: atribui a data atual a campos

– $min: altera o campo com um dado valor se este último for menor que o

valor atual do campo

– $max: altera o campo com um dado valor se este último for maior que o

valor atual do campo

(19)

Operadores para a alteração de

campos de um documento

● Ex. 3: o comando abaixo incrementa em a quantidade de créditos de

MAC0439, remove o campo

avaliacao

e renomeia o campo

nome

para

nome_disciplina

:

db.disciplinas.updateOne(

{"codigo":"MAC0439"},

{$inc:{"creditos_aula": 2, "creditos_trabalho": 2},

$unset:{"avaliacao": ""},

$rename:{"nome":"nome_disciplina"}});

● Resposta:

(20)

Alterações de documentos

Operadores para arrays

Operadores que podem ser usados com a update para atributos do tipo array:

$addToSet : Adic. elementos a um vetor se não existirem ainda$pop: Remove o primeiro (-1) ou o último item (1) de um vetor

$pull: Remove de um vetor todos os valores que satisfazem um dado critério

de busca

$pullAll: Remove de um vetor todas as ocorrências de valores especificados$push: Adiciona um elemento a um vetor (mesmo se ele já existir)

...

(21)

Alterações de documentos

Exemplo: operador $push

db.alunos.insertOne({"nusp": 12345,

"notas": {"MAC0439":[10,8,10,9],"MAC0426":[6,9,10,7]}});

● Adiciona as notas 6 e 4 nas notas do MAC0426 do aluno com NUSP =

12345: db.alunos.updateOne({"nusp": 12345}, {$push:{ "notas.MAC0426":{$each:[6,4]} } });

(22)

Alterações de documentos

Exemplo: operadore $pull e $pullAll

Remove as notas de MAC426 menores do que 5 de todos os alunos:

db.alunos.updateMany({},

{$pull:{"notas.MAC0426":{$lt:5}}});

Remove todas as notas 9 e 10 de MAC0426 de todos os alunos:

db.alunos.updateMany({},

(23)

Alterações de documentos

Exemplo: operador $pop

Remove a primeira nota de MAC0439 do aluno com NUSP = 12345:

db.alunos.updateOne({"nusp": 12345},

{$pop:{"notas.MAC0439":-1}});

Remove a última nota de MAC0439 do aluno com NUSP = 12345:

db.alunos.updateOne({"nusp": 12345},

{$pop:{"notas.MAC0426":1}});

(24)

Alteração de documentos

Parâmetros opcionais das funções de update:

upsert: quando true (1), indica que o documento será adicionado à

coleção caso nenhum dos documentos existentes satisfaça a condição de busca

● o valor default de upsert é false

– writeConcern: igual ao das funções de inserção

collation: configurações para a comparação de strings

– arrayFilters: determina quais elementos de um array devem ser

modificados quando o update alterar um campo do tipo array

– hint: especifica o índice a ser usado para apoiar a execução do comando

(25)

Alteração de documentos

Exemplo com $upsert:true

Ex. 4: o comando abaixo tenta alterar o campo creditos_aula da

disciplina de código

MAC0218

, mas caso não exista um documento com

esse código de disciplina, ele cria o documento na coleção:

db.disciplinas.updateOne(

{"codigo":"MAC0218"},

{$set:{"creditos_aula":4}},

{upsert:true}

(26)

Substituição de documentos

A função replaceOne substitui um documento da coleção por um

outro documento.

Forma geral do comando replaceOne:

db.collection.replaceOne( <condições de filtro>, <documento substituto>, { upsert: <boolean>, writeConcern: <document>, collation: <document>, hint: <document|string>});

Critérios para a seleção do documento a ser substituído

Parâmetros de configuração da substituição (opcionais) Documento que substituirá

(27)

Substituição de documentos

Exemplo:

db.disciplinas.replaceOne( {"codigo":"MAC0218"},

{"cod_disciplina": "MAC0218",

"nome": "Técnicas de Programação II",

"creditos_aula": 4, "creditos_trabalho": 2,

"ativacao": ISODate("2018-01-01T00:00:00-03"), "avaliacao": ["provas","exercícios"]});

Resposta:

(28)

Alternativa para a alteração de documentos:

findOne + replaceOne

● Uma outra forma de atualizar parcialmente um documento é armazená-lo

em uma variável, atualizá-lo e depois gravar o conteúdo da variável no BD, como ilustrado no exemplo abaixo:

var disc =

db.disciplinas.findOne({"codigo":"MAC0439"}); // muda o código

disc.codigo = "MAC0439-B";

// adiciona ou modifica o campo professor disc.professor = "Kelly Rosa Braghetto";

(29)

Alternativa para a alteração de documentos

find + replaceOne

● O código em JavaScript a seguir cria ou modifica o atributo departamento de

todas as disciplinas que têm MAC como prefixo do código: var cursor = db.disciplinas.find({"codigo":/^MAC/}); var disc; while (cursor.hasNext()) { disc = cursor.next(); disc.departamento = "computação"; db.disciplinas.replaceOne({_id:disc._id},disc); }

(30)

Remoção de documentos

● Forma geral dos comandos de remoção:

db.<nome_da_coleção>.deleteOne( { <criterio_selecao1>:<valor1>, <criterio_selecao2>:<valor2>, … }, { writeConcern: <documento>, collation: <documento>}); db.<nome_da_coleção>.deleteMany( { <criterio_selecao1>:<valor1>, <criterio_selecao2>:<valor2>, … }, { writeConcern: <documento>, collation: <documento>}); Critérios para a seleção do documento a ser removido Critérios para a seleção dos documentos a serem removidos Parâmetros de configuração da remoção (opcionais) Parâmetros de configuração da remoção (opcionais)

(31)

Remoção de documentos

● Ex. 1: Remove a primeira disciplina que encontrar com código MAC0216

db.disciplinas.deleteOne({"codigo": "MAC0216"});

● Ex. 2: Remove todas as disciplinas com prefixo MAC ou MAT

db.disciplinas.deleteMany(

{ $or:[{"codigo":/^MAC/}, {"codigo":/^MAT/}] } );

● Ex. 3: Remove todas as disciplinas

(32)

Remoção de coleções e BDs

Para apagar a coleção

<nome_coleção>

:

Para apagar o banco de dados atualmente em uso:

db.dropDatabase();

(33)

Referências Bibliográficas

● Documentação do MongoDB – https://docs.mongodb.com/ ● Tutoriais oficiais: – https://docs.mongodb.com/manual/ – https://docs.mongodb.com/getting-started/shell/

● Mapeamento de SQL para MongoDB

– http://s3.amazonaws.com/info-mongodb-com/sql_to_mongo.pdf

– https://docs.mongodb.com/manual/reference/sql-comparison/

● Livro:

– ‘‘MongoDB: The Definitive Guide, 3rd Edition (2019) – Powerful and Scalable Data

Referências

Documentos relacionados

O score de Framingham que estima o risco absoluto de um indivíduo desenvolver em dez anos DAC primária, clinicamente manifesta, utiliza variáveis clínicas e laboratoriais

22- Receitas de Vendas de Ações: São valores referentes à contratos de vendas de ações patrimoniais a longo prazo e cuja mensalidade ainda não venceu.

Concluiu-se que o monitoramento do índice biespectral, em cães submetidos à infusão contínua de propofol e mantidos em ventilação controlada ou espontânea, foi eficaz

IV - decidir sobre a aplicação de uma ou mais das medidas prudenciais preventivas previstas na legislação vigente, a multa cominatória a elas relacionadas e sua eventual

Esta dissertação tem como objetivo geral propor um modelo de avaliação da rede logística para fins de reestruturação, utilizando o método do Fluxo de Caixa Descontado (FCD) para

Única das variáveis a valor de mercado que apresentou resultados significantes para a variável Tamanho, o endividamento de longo prazo a valor de mercado (Y6) também

Este estudo trata do desenho de um Sistema Estadual de Incentivo a Serviços Ambientais (SISA) que inclui um regime de REDD (Redução de Emissões por Desmatamento e

4.5.3.1 Comparação da evolução das e iên ias da rede gerada pelo modelo Elite om uma rede aleatória, uma rede livre de es ala e uma rede de mundo pequeno