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