MongoDB com a Turma do Chaves

download MongoDB com a Turma do Chaves

If you can't read please download the document

Transcript of MongoDB com a Turma do Chaves

com a Turma do Chaves

Por @PedroMenezesPedroMenezes.com

Planejamento

Professor Girafales explica MongoDB

Professor Girafales explica como abrir o MongoDB

Sistema da escola via MongoDB

O que o MongoDB, professor Girafales?

Ele um banco de dados diferente dos habituais, crianas. O MongoDB ...

Baseado em documentos (armazena em BSON, um formato de JSON que suporta binrios e outras coisas)

Por essa razo, seu schema flexvel. possvel criar propriedades para documentos individualmente

Ele bom pra que?

Estatsticas em tempo real, pois tem uns truques para que inserts e updates parecerem ser mais rpidos.

Cache persistente e rpido com Capped Collections (colees de tamanho fixo). Bom pra logging tambm, pois mantm ordem de insero de objetos.

High volume, low value data

Guardar objetos grandes distribudos em pedaos com o GridFS.

Quem usa o MongoDB, professor?

O pessoal do Github, SourceForge, EA, NY Times, DISQUS, Justin.tv e outros.

Onde a gente pode baixar o MongoDB?

QUEM FALOU QUE VOCS PODEM BAIXAR O MONGO?

http://www.mongodb.org e depois em Downloads

E pra rodar?

Descompacte e navegue at a pasta bin.

> sudo ./mongod # pra abrir o daemon> ./mongo # pra abrir o client

Caso d problemas pra abrir o daemon, execute: sudo mkdir -p /data/db

Cadastrando alunos

> db.alunos.save({

nome: "Chaves",

idade: 8,

armario: ["Sandwich de presunto", "Foto da Popis"]

})

> db.alunos.save({nome: "Chiquinha", idade: 8, armario: ["Boneca de pano"]})

> db.alunos.save({nome: "Kiko", idade: 9})

> db.alunos.save({nome: "Nhonho", idade: 9})

A collection criada na insero do primeiro elemento.

Note que o Kiko e o Nhonho no possuem tens no armrio.

Mostrando os alunos em ordem alfabtica

> db.alunos.find().sort({name: 1})

{

"_id": ObjectId("4b7c3341ca4fb4692dd91c54"),

"nome": "Chaves",

"idade": 8,

"armario": ["Sandwich de presunto", "Foto da Popis"]

}

{"_id" : ObjectId( "4b7c335aca4fb4692dd91c55") , "nome" : "Chiquinha" , "idade" : 8 , "armario" : ["Boneca de pano"]}

{"_id" : ObjectId( "4b7c3373ca4fb4692dd91c56") , "nome" : "Kiko" , "idade" : 9}

{"_id" : ObjectId( "4b7c337dca4fb4692dd91c57") , "nome" : "Nhonho" , "idade" : 9}

Mostrando somente nomes dos alunos em ordem alfabtica

> db.alunos.find({}, {nome: 1}).sort({nome: 1})

{"_id" : ObjectId( "4b7c3341ca4fb4692dd91c54") , "nome" : "Chaves"}

{"_id" : ObjectId( "4b7c335aca4fb4692dd91c55") , "nome" : "Chiquinha"}

{"_id" : ObjectId( "4b7c3373ca4fb4692dd91c56") , "nome" : "Kiko"}

{"_id" : ObjectId( "4b7c337dca4fb4692dd91c57") , "nome" : "Nhonho"}

Mostrando os alunos em ordem alfabtica inversa

> db.alunos.find().sort({nome: -1})

{"_id" : ObjectId( "4b7c337dca4fb4692dd91c57") , "nome" : "Nhonho" , "idade" : 9}

{"_id" : ObjectId( "4b7c3373ca4fb4692dd91c56") , "nome" : "Kiko" , "idade" : 9}

{"_id" : ObjectId( "4b7c3341ca4fb4692dd91c54") , "nome" : "Chaves" , "idade" : 8 , "armario" : ["Sandwich de presunto","Foto da Popis"]}

{"_id" : ObjectId( "4b7c335aca4fb4692dd91c55") , "nome" : "Chiquinha" , "idade" : 8 , "armario" : ["Boneca de pano"]}

Mostrar alunos em ordem alfabtica exceto o primeiro

> db.alunos.find().sort({nome: 1}).skip(1)

{"_id" : ObjectId( "4b7c335aca4fb4692dd91c55") , "nome" : "Chiquinha" , "idade" : 8 , "armario" : ["Boneca de pano"]}

{"_id" : ObjectId( "4b7c3373ca4fb4692dd91c56") , "nome" : "Kiko" , "idade" : 9}

{"_id" : ObjectId( "4b7c337dca4fb4692dd91c57") , "nome" : "Nhonho" , "idade" : 9

Mostrar 2 alunos em ordem alfabtica exceto o primeiro

> db.alunos.find().sort({nome: 1}).skip(1).limit(2)

{"_id" : ObjectId( "4b7c335aca4fb4692dd91c55") , "nome" : "Chiquinha" , "idade" : 8 , "armario" : ["Boneca de pano"]}

{"_id" : ObjectId( "4b7c3373ca4fb4692dd91c56") , "nome" : "Kiko" , "idade" : 9}

Mostrando alunos com nome comeando com a letra C

> db.alunos.find({nome: /^C/})

{"_id" : ObjectId( "4b7c3341ca4fb4692dd91c54") , "nome" : "Chaves" , "idade" : 8 , "armario" : ["Sandwich de presunto","Foto da Popis"]}

{"_id" : ObjectId( "4b7c335aca4fb4692dd91c55") , "nome" : "Chiquinha" , "idade" : 8 , "armario" : ["Boneca de pano"]}

Mostrar somente um documento: o do Chaves

> db.alunos.findOne({ nome: "Chaves"})

{"_id" : ObjectId( "4b7c3341ca4fb4692dd91c54") , "nome" : "Chaves" , "idade" : 8 , "armario" : ["Sandwich de presunto","Foto da Popis"]}

Mostrar somente documentos do Chaves e Kiko

> db.alunos.find({ nome: {$in: ["Chaves", "Kiko"]} })

{"_id" : ObjectId( "4b7c3341ca4fb4692dd91c54") , "nome" : "Chaves" , "idade" : 8 , "armario" : ["Sandwich de presunto","Foto da Popis"]}

{"_id" : ObjectId( "4b7c3373ca4fb4692dd91c56") , "nome" : "Kiko" , "idade" : 9}

Cola: condicional operators

Mostrar alunos com Boneca de pano no armrio

> db.alunos.find({ armario: "Boneca de pano" })

{"_id" : ObjectId( "4b7c335aca4fb4692dd91c55") , "nome" : "Chiquinha" , "idade" : 8 , "armario" : ["Boneca de pano"]}

Mostrar o total de alunos

> db.alunos.count()

4

Mostrar o total de alunos com nome comeando com a letra C

> db.alunos.find({nome: /C/}).count()ou

> db.alunos.count({nome: /C/})

2

Deletando um aluno

> db.alunos.remove({nome: "Kiko"})

Adicionando um elemento em um array

> db.alunos.update({nome: "Chaves"}, {$push: {materias: {materia: "Matemtica", notas: [7, 5, 7]}}})

> db.alunos.update({nome: "Chaves"}, {$push: {materias: {materia: "Ingls", notas: [8, 9, 9.5]}}})

> db.alunos.findOne({ nome: "Chaves"})

{

"_id": ObjectId("4b7c3d34ca4fb4692dd91c5b"),

"nome": "Chaves",

"idade": 9,

"armario": ["Sandwich de presunto", "Foto da Popis"],

"materias": [{

"materia": "Matemtica",

"notas": [7, 5, 7]

},

{

"materia": "Ingls",

"notas": [8, 9, 9.5]

}]

}

Cola: modifier operators

Adicionando mais de um elemento em um array

> db.alunos.update({nome: "Nhonho"}, {$pushAll: {materias: [ {materia: "Matemtica", notas: [9, 9, 8.5]}, {materia: "Ingls", notas: [9, 9.5, 10]} ]}})

> db.alunos.update({

nome: "Chiquinha"

}, {

$pushAll: {

materias: [{

materia: "Matemtica",

notas: [5, 5, 6.5]

},

{

materia: "Ingls",

notas: [6, 6, 5.5]

}]

}

})

Aumentar um nmero

> db.alunos.update({

nome: "Chaves"

}, {

$inc: {

idade: 1

}

})

Listar os alunos usando JavaScript

> db.alunos.find().sort({

nome: 1

}).forEach(function (aluno) {

print("Aluno: " + aluno.nome)

})

Aluno: Chaves

Aluno: Chiquinha

Aluno: Nhonho

Mdia de cada matria de cada aluno

> db.alunos.find().sort({

nome: 1

}).forEach(function (aluno) {

print("\n" + aluno.nome);

aluno.materias.forEach(function (materia) {

var somaDasNotas = 0;

materia.notas.forEach(function (nota) {

somaDasNotas += nota;

});

var media = somaDasNotas / materia.notas.length;

print(materia.materia + ": " + media)

});

})

Resultado da Mdia de cada matria de cada aluno

ChavesMatemtica: 6.333333333333333

Ingls: 8.833333333333334Chiquinha

Matemtica: 5.5

Ingls: 5.833333333333333Nhonho

Matemtica: 8.833333333333334

Ingls: 9.5

Listar nmero de alunos agrupados por idade

> db.alunos.group({

key: {

idade: true

},

initial: {

alunos: 0

},

reduce: function (aluno, grupo) {

grupo.alunos++;

}

})

[{"idade" : 9 , "alunos" : 2},{"idade" : 8 , "alunos" : 1}]

Agora vamos para a aula de geografia.

Darei uma breve introduo ao MapReduce.

Calcular a mdia das notas de cada matria

> mapReduce = db.alunos.mapReduce(function () {

this.materias.forEach(function (materia) {

materia.notas.forEach(function (nota) {

emit(materia.materia, nota);

})

})

}, function (key, vals) {

var somaDasNotas = 0;

vals.forEach(function (nota) {

somaDasNotas += nota;

});

var media = somaDasNotas / vals.length;

return media;

})

Resultado do clculo a mdia das notas de cada matria

{"result" : "tmp.mr.mapreduce_1266446901_6",

"timeMillis" : 74, "counts" : {"input" : 3, "emit" : 18, "output" : 2},

"ok" : 1,}

> db[mapReduce.result].find()

{ "_id" : "Ingls", "value" : 8.055555555555555 }

{ "_id" : "Matemtica", "value" : 6.888888888888889 }

Alguma pergunta, crianas?

com a Turma do Chaves

Por @PedroMenezes PedroMenezes.com

Muokkaa otsikon tekstimuotoa napsauttamalla

Muokkaa jsennyksen tekstimuotoa napsauttamallaToinen jsennystasoKolmas jsennystasoNeljs jsennystasoViides jsennystasoKuudes jsennystasoSeitsems jsennystasoKahdeksas jsennystasoYhdekss jsennystaso