com a Turma do Chaves Por @PedroMenezes PedroMenezes.com
Planejamento <ul><li>Professor Girafales explica MongoDB
Professor Girafales explica como abrir o MongoDB
Sistema da escola via MongoDB </li></ul>
O que é o MongoDB, professor Girafales? <ul>Ele é um banco de dados  diferente dos habituais, crianças.  O MongoDB é... </ul>
<ul><ul><li>Baseado em  documentos
(armazena em  BSON , um formato de JSON
que suporta binários e outras coisas)
Por essa razão, seu  schema  é  flexível .
É possível criar propriedades
para documentos individualmente </li></ul></ul>
Ele é bom pra que? <ul><ul><li>Estatísticas em tempo real,
pois tem uns truques para que
inserts e updates parecerem
ser mais rápidos.
Cache ”persistente” e rápido com
Capped Collections (coleções de tamanho fixo).
Bom pra logging também,
pois mantém ordem de inserção de objetos.
” High volume, low value data”
Guardar objetos grandes distribuídos em
pedaços com o GridFS. </li></ul></ul>
Quem usa o MongoDB, professor? <ul><ul><li>O pessoal do Github, SourceForge,
EA, NY Times, DISQUS,
Justin.tv e outros. </li></ul></ul>
Onde a gente pode baixar o MongoDB? <ul>QUEM FALOU QUE VOCÊS  PODEM BAIXAR O MONGO? http://www.mongodb.org   e depois em D...
E pra rodar? <ul>Descompacte e  navegue até a pasta bin. > sudo ./mongod # pra abrir o daemon > ./mongo # pra abrir o clie...
Cadastrando alunos <ul><li>> db.alunos. save ( {
nome: &quot;Chaves&quot;,
idade: 8,
armario: [&quot;Sandwich de presunto&quot;, &quot;Foto da Popis&quot;]
} )
> db.alunos.save({nome: &quot;Chiquinha&quot;, idade: 8, armario: [&quot;Boneca de pano&quot;]})
Upcoming SlideShare
Loading in...5
×

MongoDB com a Turma do Chaves

34,090

Published on

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/.

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
34,090
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
50
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Transcript of "MongoDB com a Turma do Chaves"

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

    Clipping is a handy way to collect important slides you want to go back to later.

×