O documento apresenta os principais conceitos do MongoDB, incluindo sua estrutura de banco de dados não-relacional baseado em documentos JSON e coleções, além de funcionalidades como queries, indexação, agregação e operações CRUD utilizando o Mongo Shell.
4. Coleção
•Agrupamento de Documentos
• Análogo a Tabela no Modelo Relacional
• Usualmente com a mesma estrutura
• Não é regra. Coleções são livres de Esquema!
•Armazenados no formato BSON
• Representação binária de um JSON
5. Documento
•Instância de Objeto Javascript
• Conjunto de Chave-valor
• Sem métodos, hierarquia de classes, etc.
• CodiWicação Binária (BSON)
• Tamanho máximo de 16Mb
6. Tipos de Dado
•Tipos básicos de dados presentes no JavaScript
• String, Array
• Integer, Double
• Boolean, NULL
• Object
•Tipos especiais do MongoDB
• ObjectID
• BinaryData
• Regular Expression
• Code
7. Campo
•Chave
• Um nome para o campo, representado como String
•Valor
• Valor referente a chave
{ nome: ‘Mongo’, tipo: ‘DB’ }
8. Metodologia de Query
•Orientada a Documentos
{nome: {primeiro: 'José', ultimo: 'Junior'}}
{nome.ultimo: 'Junior'}
{nome.ultimo: /^D/}
{tags: {$in: ['armazenamento', 'DBMS']}}
12. Funcionalidades
•Execução de JavaScript
• Server-side
• Queries e MapReduce
• Tempo de pesquisa
• Documento
•Coleções limitadas
• Tamanho Wixo
• Respeita ordem de inserção
• Lista circular
14. Mongo Shell
•Método de Interação direta com o Banco
• Similar ao Shell MySQL
•JavaScript
• Linguagem padrão da shell do Mongo
$ cd mongo-db
$ bin/mongo
MongoDB shell version: 1.8
url: test
connecting to: test
type "help" for help
>
15. MongoDB shell version: 1.8
url: test
connecting to: test
type "help" for help
>
> for (var i = 1; i < 5; i++) db.things.save({x : 4, y : j});
> db.things.find();
{ "_id" : ObjectId("4c220a42f3924d31102bd856"), "x" : 4, "j" : 1 }
{ "_id" : ObjectId("4c220a42f3924d31102bd857"), "x" : 4, "j" : 2 }
{ "_id" : ObjectId("4c220a42f3924d31102bd858"), "x" : 4, "j" : 3 }
>
Inserção de Documentos
•Objeto db.nome_da_coleção
• Criação lazy das Coleções
• Método save()
16. Recuperação de
Documentos
> db.things.find();
{ "_id" : ObjectId("4c220a42f3924d31102bd856"), "x" : 4, "j" : 1 }
{ "_id" : ObjectId("4c220a42f3924d31102bd857"), "x" : 4, "j" : 2 }
{ "_id" : ObjectId("4c220a42f3924d31102bd858"), "x" : 4, "j" : 3 }
> var cursor = db.things.find();
> while(cursor.hasNext()) printjson(cursor.next());
{ "_id" : ObjectId("4c220a42f3924d31102bd856"), "x" : 4, "j" : 1 }
{ "_id" : ObjectId("4c220a42f3924d31102bd857"), "x" : 4, "j" : 2 }
{ "_id" : ObjectId("4c220a42f3924d31102bd858"), "x" : 4, "j" : 3 }
•Método find()
• Objeto cursor
• Estruturas de iteração
18. Remoção de Documentos
•Método remove()
• Operadores de ModiWicação
• Atomicidade
• Execução Server-side
• Operações Bitwise
MongoDB shell version: 1.8
url: test
connecting to: test
type "help" for help
>
> db.alunos.remove({}); // remove todos os documentos da coleção
>
> db.alunos.remove({n:1}); // remove todos documentos com n = 1
>
> db.alunos.remove( { nota : { $lt : 7 }, $atomic : true } )
21. Operadores de
ModiCicação
•Incremento
• $inc : {‘likes’ : n}
• Incrementa n vezes o campo likes
•Setter
• $set : {‘likes’ : m}
•Seta o campo likes para m
•Push
• $push : {‘comments’:{‘nome’:‘Derek’}
• Adiciona elemento no vetor comments
• Cria vetor caso não existir, adicionando o elemento
22. Operadores de
ModiCicação
•addToSet
• $addToSet:{a:{[‘c1’:‘v1’, ‘cN:‘vN’]}
•Each
• {$each : [1, 2, 3, 4, 5]}
•Pode ser usado em conjunto com o $addToSet
•Pop
• $pop : {campo: 1 }
• Remove o último elemento de um vetor
• $pop : {campo: 1 }
• Remove o primeiro elemento de um vetor
23. Operadores de
ModiCicação
•Pull
• $pull:{pessoas : {nome : “José”}}
•Remove todas ocorrências com nome José
•PullAll
• $pull:{cursos : {dia : [15, 20] } }
•Remove todas ocorrências com dia 15 e 20
•Rename
• $rename : { horas : horas_extra }
• Renomeia o campo hora para horas_extra
24. Operadores de
ModiCicação
•Bitwise
• Só pode ser usado com inteiros
• $bit:{bitmap : {red : {and:5} }}
• $bit:{bitmap : {green : {or:20} }}
• $bit:{bitmap : {green : {and:5, or:20} }}
•Operador de atomicidade
• Escritas de campos são feitas atômicamente
• Atualizações com multi não são atômicas
• Usar o operador $atomic para garantir atomicidade
• db.t.update({nota: {$gt: 60}, $atomic: true}, {$set: {aprv: true}}, false,
true);
26. MapReduce
•Conceito básico
• Opera sobre um conjunto de dados
• Pipeline distribuído
• Análogo ao GROUP BY no SQL
•Vantagem
• Paralelismo
• Sharding
• Extensibilidade
27. MapReduce
•Exemplo
• Agregar todos os “likes” nos comentários de um usuário
•Modelo de Dados
• Coleção de Comentários
MongoDB shell version: 2.0
url: test
connecting to: test
type "help" for help
>
> var doc = { usuario : “João”,
likes : 20,
comentario : “Teste” };
>
> db.comentarios.save(doc);
28. Função Map
•Mapear os dados
• Mapear por Nome
• Agregar em vetor
• Contagem e número de Likes
> function funcaoMap() {
emit(this.username,
{contagem : 1,
likes : this.likes});
}
29. Função Reduce
•Recebe retorno da função Map
• Chamada para cada chave retornada pela função Map
• Cada chave tem um array de objetos relacionado a ela
• Deve ser compatível com o objeto emitido pela Map
> function funcaoReduce(key, value) {
var result = {count: 0, likes: 0};
values.forEach(function(value) {
result.count += value.count;
result.likes += value.likes;
});
return result;
}