MongoDB com a Turma do Chaves
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

MongoDB com a Turma do Chaves

on

  • 29,910 views

Meu primeiro workshop foi bem irado. ...

Meu primeiro workshop foi bem irado.

A explicação sobre MapReduce foi no quadro branco, não nos slides. :}

Qualquer dúvida, me pergunte!

PS: a expressão regular dos alunos que começam com a letra C está errada. O certo é /^C/.

Statistics

Views

Total Views
29,910
Views on SlideShare
29,908
Embed Views
2

Actions

Likes
2
Downloads
47
Comments
0

1 Embed 2

http://www.slideshare.net 2

Accessibility

Categories

Upload Details

Uploaded via as OpenOffice

Usage Rights

CC Attribution-NonCommercial LicenseCC Attribution-NonCommercial License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

MongoDB com a Turma do Chaves Presentation Transcript

  • 1. com a Turma do Chaves Por @PedroMenezes PedroMenezes.com
  • 2. Planejamento
    • Professor Girafales explica MongoDB
    • 3. Professor Girafales explica como abrir o MongoDB
    • 4. Sistema da escola via MongoDB
  • 5. O que é o MongoDB, professor Girafales?
      Ele é um banco de dados diferente dos habituais, crianças. O MongoDB é...
  • 6.
      • Baseado em documentos
      • 7. (armazena em BSON , um formato de JSON
      • 8. que suporta binários e outras coisas)
      • 9. Por essa razão, seu schema é flexível .
      • 10. É possível criar propriedades
      • 11. para documentos individualmente
  • 12. Ele é bom pra que?
      • Estatísticas em tempo real,
      • 13. pois tem uns truques para que
      • 14. inserts e updates parecerem
      • 15. ser mais rápidos.
      • 16. Cache ”persistente” e rápido com
      • 17. Capped Collections (coleções de tamanho fixo).
      • 18. Bom pra logging também,
      • 19. pois mantém ordem de inserção de objetos.
      • 20. ” High volume, low value data”
      • 21. Guardar objetos grandes distribuídos em
      • 22. pedaços com o GridFS.
  • 23. Quem usa o MongoDB, professor?
      • O pessoal do Github, SourceForge,
      • 24. EA, NY Times, DISQUS,
      • 25. Justin.tv e outros.
  • 26. Onde a gente pode baixar o MongoDB?
      QUEM FALOU QUE VOCÊS PODEM BAIXAR O MONGO? http://www.mongodb.org e depois em Downloads
  • 27. 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
  • 28. Cadastrando alunos
    • > db.alunos. save ( {
    • 29. nome: "Chaves",
    • 30. idade: 8,
    • 31. armario: ["Sandwich de presunto", "Foto da Popis"]
    • 32. } )
    • 33. > db.alunos.save({nome: "Chiquinha", idade: 8, armario: ["Boneca de pano"]})
    • 34. > db.alunos.save({nome: "Kiko", idade: 9})
    • 35. > db.alunos.save({nome: "Nhonho", idade: 9})
    • A collection é criada na inserção
    • 36. do primeiro elemento.
    • 37. Note que o Kiko e o Nhonho
    • 38. não possuem ítens no armário.
  • 39. Mostrando os alunos em ordem alfabética
    • > db.alunos.find(). sort({name: 1})
    • 40. {
    • 41. "_id": ObjectId("4b7c3341ca4fb4692dd91c54") ,
    • 42. "nome": " Chaves ",
    • 43. "idade": 8,
    • 44. "armario": ["Sandwich de presunto", "Foto da Popis"]
    • 45. }
    • 46. {"_id" : ObjectId( "4b7c335aca4fb4692dd91c55") , "nome" : " Chiquinha " , "idade" : 8 , "armario" : ["Boneca de pano"]}
    • 47. {"_id" : ObjectId( "4b7c3373ca4fb4692dd91c56") , "nome" : " Kiko " , "idade" : 9}
    • 48. {"_id" : ObjectId( "4b7c337dca4fb4692dd91c57") , "nome" : " Nhonho " , "idade" : 9}
  • 49. Mostrando somente nomes dos alunos em ordem alfabética
    • > db.alunos.find({}, {nome: 1} ).sort({nome: 1})
    • 50. {"_id" : ObjectId( "4b7c3341ca4fb4692dd91c54") , "nome" : " Chaves "}
    • 51. {"_id" : ObjectId( "4b7c335aca4fb4692dd91c55") , "nome" : " Chiquinha "}
    • 52. {"_id" : ObjectId( "4b7c3373ca4fb4692dd91c56") , "nome" : " Kiko "}
    • 53. {"_id" : ObjectId( "4b7c337dca4fb4692dd91c57") , "nome" : " Nhonho "}
  • 54. Mostrando os alunos em ordem alfabética inversa
    • > db.alunos.find() .sort({nome: -1})
    • 55. {"_id" : ObjectId( "4b7c337dca4fb4692dd91c57") , "nome" : " Nhonho " , "idade" : 9}
    • 56. {"_id" : ObjectId( "4b7c3373ca4fb4692dd91c56") , "nome" : " Kiko " , "idade" : 9}
    • 57. {"_id" : ObjectId( "4b7c3341ca4fb4692dd91c54") , "nome" : " Chaves " , "idade" : 8 , "armario" : ["Sandwich de presunto","Foto da Popis"]}
    • 58. {"_id" : ObjectId( "4b7c335aca4fb4692dd91c55") , "nome" : " Chiquinha " , "idade" : 8 , "armario" : ["Boneca de pano"]}
  • 59. Mostrar alunos em ordem alfabética exceto o primeiro
    • > db.alunos.find().sort({nome: 1}) .skip(1)
    • 60. {"_id" : ObjectId( "4b7c335aca4fb4692dd91c55") , "nome" : " Chiquinha " , "idade" : 8 , "armario" : ["Boneca de pano"]}
    • 61. {"_id" : ObjectId( "4b7c3373ca4fb4692dd91c56") , "nome" : " Kiko " , "idade" : 9}
    • 62. {"_id" : ObjectId( "4b7c337dca4fb4692dd91c57") , "nome" : " Nhonho " , "idade" : 9
  • 63.
    • Mostrar 2 alunos em ordem alfabética exceto o primeiro
    • > db.alunos.find().sort({nome: 1}).skip(1) .limit(2)
    • 64. {"_id" : ObjectId( "4b7c335aca4fb4692dd91c55") , "nome" : " Chiquinha " , "idade" : 8 , "armario" : ["Boneca de pano"]}
    • 65. {"_id" : ObjectId( "4b7c3373ca4fb4692dd91c56") , "nome" : " Kiko " , "idade" : 9}
  • 66. Mostrando alunos com nome começando com a letra C
    • > db.alunos.find({nome: /^C/ })
    • 67. {"_id" : ObjectId( "4b7c3341ca4fb4692dd91c54") , "nome" : " Chaves " , "idade" : 8 , "armario" : ["Sandwich de presunto","Foto da Popis"]}
    • 68. {"_id" : ObjectId( "4b7c335aca4fb4692dd91c55") , "nome" : " Chiquinha " , "idade" : 8 , "armario" : ["Boneca de pano"]}
  • 69. Mostrar somente um documento: o do Chaves
    • > db.alunos. findOne ({ nome: " Chaves "})
    • 70. {"_id" : ObjectId( "4b7c3341ca4fb4692dd91c54") , "nome" : " Chaves " , "idade" : 8 , "armario" : ["Sandwich de presunto","Foto da Popis"]}
  • 71.
    • Mostrar somente documentos do Chaves e Kiko
    • > db.alunos.find({ nome: { $in: ["Chaves", "Kiko"]} })
    • 72. {"_id" : ObjectId( "4b7c3341ca4fb4692dd91c54") , "nome" : "Chaves" , "idade" : 8 , "armario" : ["Sandwich de presunto","Foto da Popis"]}
    • 73. {"_id" : ObjectId( "4b7c3373ca4fb4692dd91c56") , "nome" : "Kiko" , "idade" : 9}
    Cola: condicional operators
  • 74. Mostrar alunos com Boneca de pano no armário
    • > db.alunos.find({ armario: "Boneca de pano" })
    • 75. {"_id" : ObjectId( "4b7c335aca4fb4692dd91c55") , "nome" : "Chiquinha" , "idade" : 8 , "armario" : ["Boneca de pano"]}
  • 76. Mostrar o total de alunos
    • > db.alunos. count()
    • 77. 4
  • 78.
    • Mostrar o total de alunos com nome começando com a letra C
    • > db.alunos.find({nome: /C/}) .count()
    • 79. ou
    • 80. > db.alunos .count({nome: /C/})
    • 81. 2
  • 82.
    • Deletando um aluno
    • > db.alunos .remove({nome: "Kiko"})
  • 83.
    • Adicionando um elemento em um array
    • > db.alunos. update ({nome: "Chaves"}, {$push: {materias: {materia: "Matemática", notas: [7, 5, 7]}} })
    • 84. > db.alunos. update ({nome: "Chaves"}, {$push: {materias: {materia: "Inglês", notas: [8, 9, 9.5]}} })
    • 85. > db.alunos.findOne({ nome: "Chaves"})
    • 86. {
    • 87. "_id": ObjectId("4b7c3d34ca4fb4692dd91c5b"),
    • 88. "nome": "Chaves",
    • 89. "idade": 9,
    • 90. "armario": ["Sandwich de presunto", "Foto da Popis"],
    • 91. "materias": [{
    • 92. "materia": "Matemática",
    • 93. "notas": [7, 5, 7]
    • 94. },
    • 95. {
    • 96. "materia": "Inglês",
    • 97. "notas": [8, 9, 9.5]
    • 98. }]
    • 99. }
    Cola: modifier operators
  • 100. Adicionando mais de um elemento em um array
    • > db.alunos.update({nome: "Nhonho"}, {$pushAll: {materias: [ {materia: "Matemática", notas: [9, 9, 8.5]}, {materia: "Inglês", notas: [9, 9.5, 10]} ]}})
    • 101. > db.alunos.update({
    • 102. nome: "Chiquinha"
    • 103. }, {
    • 104. $pushAll: {
    • 105. materias: [{
    • 106. materia: "Matemática",
    • 107. notas: [5, 5, 6.5]
    • 108. },
    • 109. {
    • 110. materia: "Inglês",
    • 111. notas: [6, 6, 5.5]
    • 112. }]
    • 113. }
    • 114. })
  • 115.
    • Aumentar um número
    • > db.alunos.update({
    • 116. nome: "Chaves"
    • 117. }, {
    • 118. $inc : {
    • 119. idade : 1
    • 120. }
    • 121. })
  • 122.
    • Listar os alunos usando JavaScript
    • > db.alunos.find().sort({
    • 123. nome: 1
    • 124. }) .forEach(function (aluno) {
    • 125. print("Aluno: " + aluno.nome)
    • 126. } )
    • 127. Aluno: Chaves
    • 128. Aluno: Chiquinha
    • 129. Aluno: Nhonho
  • 130.
    • Média de cada matéria de cada aluno
    • > db.alunos.find().sort({
    • 131. nome: 1
    • 132. }).forEach(function (aluno) {
    • 133. print(" " + aluno.nome);
    • 134. aluno.materias.forEach(function (materia) {
    • 135. var somaDasNotas = 0;
    • 136. materia.notas.forEach(function (nota) {
    • 137. somaDasNotas += nota;
    • 138. });
    • 139. var media = somaDasNotas / materia.notas.length;
    • 140. print(materia.materia + ": " + media)
    • 141. });
    • 142. })
  • 143.
    • Resultado da Média de cada matéria de cada aluno
      Chaves
    • Matemática: 6.333333333333333
    • 144. Inglês: 8.833333333333334
    • 145. Chiquinha
    • 146. Matemática: 5.5
    • 147. Inglês: 5.833333333333333
    • 148. Nhonho
    • 149. Matemática: 8.833333333333334
    • 150. Inglês: 9.5
  • 151.
    • Listar número de alunos agrupados por idade
    • > db.alunos. group ({
    • 152. key : {
    • 153. idade: true
    • 154. },
    • 155. initial : {
    • 156. alunos: 0
    • 157. },
    • 158. reduce : function ( aluno , grupo ) {
    • 159. grupo.alunos++;
    • 160. }
    • 161. })
    • 162. [{"idade" : 9 , "alunos" : 2},{"idade" : 8 , "alunos" : 1}]
  • 163.
      Agora vamos para a aula de geografia . Darei uma breve introdução ao MapReduce .
  • 164.
    • Calcular a média das notas de cada matéria
    • > mapReduce = db.alunos. mapReduce (function () {
    • 165. this.materias. forEach (function ( materia ) {
    • 166. materia.notas.forEach(function (nota) {
    • 167. emit( materia.materia , nota );
    • 168. })
    • 169. })
    • 170. }, function ( key , vals ) {
    • 171. var somaDasNotas = 0;
    • 172. vals.forEach (function (nota) {
    • 173. somaDasNotas += nota;
    • 174. });
    • 175. var media = somaDasNotas / vals.length;
    • 176. return media;
    • 177. })
  • 178.
    • Resultado do cálculo a média das notas de cada matéria
    • {" result " : "tmp.mr.mapreduce_1266446901_6",
    • 179. "timeMillis" : 74, "counts" : {"input" : 3, "emit" : 18, "output" : 2},
    • 180. "ok" : 1,}
    • 181. > db[ mapReduce.result ].find()
    • 182. { " _id " : "Inglês", " value " : 8.055555555555555 }
    • 183. { "_id" : "Matemática", "value" : 6.888888888888889 }
  • 184.
      Alguma pergunta, crianças?
  • 185. com a Turma do Chaves Por @PedroMenezes PedroMenezes.com