Portuguese, Brazilian feliratok

← Unwind Operator - Data Wranging with MongoDB

Beágyazókód kérése
4 Languages

Showing Revision 8 created 06/20/2016 by Udacity Robot.

  1. Muito bem. Vamos conversar agora sobre o
  2. operador de agregação unwind. Em várias situações, vamos
  3. querer contar ou fazer algum outro tipo de
  4. operação com base nos valores em um campo de array. Precisamos
  5. usar valores de campo de array de alguma maneira. Então,
  6. com estes dados, podemos querer responder a perguntas
  7. como a seguinte: Em nossa coleção, quem incluiu a maior quantidade de
  8. user_mentions em seus tweets? Agora, o motivo pelo qual isso é
  9. relevante para o operador unwind é porque
  10. user_mentions está incluído em nossos tweets dentro de um campo
  11. de array. Nestes dados, se você se lembrar,
  12. user_mentions são encontrados dentro do subdocumento entities,
  13. especificamente, no campo user_mentions. User_mentions
  14. é um array que contém documentos que representam
  15. as menções de cada usuário individual. Então, o que farei aqui
  16. será obter alguns exemplos usando esta consulta.
  17. Agora, estou usando um operador que ainda não tínhamos
  18. visto. O que ele diz é: retorne documentos em que
  19. o campo user_mentions do subdocumento entities tenha comprimento
  20. igual a 3. Então, imprimirei isso. Em seguida, se rolarmos
  21. para cima, poderemos ver que este exemplo aqui
  22. tem três user_mentions. E, para que você
  23. possa ter uma ideia geral, entities é um campo de nível
  24. superior aqui. Ele tem um subdocumento como um valor e
  25. user_mentions é um dos campos desse
  26. subdocumento entities. User_mentions é um campo de valor
  27. de array. Podemos ver que ele possui documentos
  28. com este formato. Mas estamos interessados nestes
  29. screen_names aqui, pois eles são os nomes dos usuários
  30. que são mencionados neste tweet específico.
  31. E, para qualquer tweet que mencione um usuário,
  32. você terá um array com documentos como este dentro
  33. dele, nomeando os usuários mencionados. Agora, o que queremos
  34. descobrir é uma contagem de todos os user_mentions
  35. feitos por um usuário individual do Twitter. Para isso, o que teremos de
  36. fazer será analisar todos os tweets. Haverá
  37. algum agrupamento envolvido, é claro, pois queremos
  38. agrupar os tweets por usuários. Mas também queremos
  39. contar o número de user_mentions. Unwind é uma ferramenta
  40. conveniente para fazer isso e responder a essa pergunta específica. Vamos
  41. ver. Bem, aqui estão nossos canais de agregação.
  42. Nosso primeiro estágio usa o operador unwind e ele
  43. está sendo executado em relação ao campo user_mentions. Lembre-se
  44. de que o que unwind faz é criar uma cópia
  45. do documento contido para qualquer campo de array.
  46. Ele duplica todos os campos, exceto para os itens no
  47. array. E ele criará uma cópia para cada
  48. elemento no array. A única diferença entre
  49. todas as cópias será que este campo
  50. assumirá cada um dos diferentes valores no array,
  51. nos documentos que serão produzidos. Então, deixe-me
  52. concretizar isso um pouco mais. Se analisarmos
  53. isso novamente, para este tweet em particular, a
  54. fase de desenrolamento produzirá três documentos como saída para este
  55. documento de tweet aqui. Todos os outros campos que
  56. vemos aqui, todos estes, e tudo o mais aqui neste
  57. documento de tweet serão exatamente iguais. A única diferença será que o
  58. campo user_mentions terá um único documento como seu
  59. valor em cada uma das três cópias deste tweet. Na
  60. primeira cópia, ele terá isto como seu valor. Na segunda cópia,
  61. ele terá isto e, por fim, a terceira cópia
  62. terá isto. Assim, nos documentos passados para
  63. o próximo estágio, neste caso o estágio group,
  64. os documentos terão um valor diferente para o campo
  65. user_mentions. Agora, acontece que, no nosso caso, o que
  66. realmente nos interessa é saber sobre esse efeito de divisão. E não muito
  67. qual será o valor de user_mentions a cada vez.
  68. Porque o que estamos interessados em fazer no próximo estágio é,
  69. essencialmente, contar todos os documentos
  70. passados para este estágio group com
  71. o mesmo screen_name para o usuário que criou
  72. o tweet. Porque, de novo, lembre-se: a questão que queremos
  73. responder aqui é: quem incluiu a maior quantidade de user_mentions em seus tweets? Portanto, quando
  74. chegarmos neste estágio, unwind terá
  75. produzido um documento individual para cada
  76. user_mention na coleção. E o agrupamento deles
  77. irá reuni-los com base no screen_name
  78. do usuário que criou o tweet; em seguida,
  79. nós apenas produziremos um campo count aqui como
  80. parte de nossa operação group. Lembre-se novamente de que
  81. sum apenas incrementa este contador toda vez
  82. que você vê o documento que está vinculado ao
  83. screen_name ou um documento que tenha
  84. o mesmo screen_name. Então, definimos nossos estados de
  85. sort e limit. Uma pergunta que tenho para você aqui é:
  86. isso contará o número de
  87. user_mentions exclusivos? Ou seja, se um usuário do Twitter
  88. mencionar o mesmo usuário mais de uma vez, será
  89. contabilizada cada uma dessas menções ou
  90. todas as menções de um mesmo usuário será contabilizada como uma única menção? Se
  91. não forem menções exclusivas que estão sendo contadas aqui,
  92. a pergunta que faço a você é: quais tipos de
  93. canais de agregação precisamos reunir para
  94. contar menções exclusivas de usuários? Certo. Então, vamos
  95. executar isso. E como limitamos isso a 1, obtemos
  96. um documento em nosso array result com
  97. count igual a 21 para user_mentions deste usuário. No caso
  98. disso ainda não estar claro para você até
  99. este ponto, a vantagem do framework de agregação no MongoDB é
  100. que todo esse trabalho está sendo feito
  101. no lado do servidor. Isso significa que, para esta consulta específica,
  102. tudo o que vem pela rede para nosso
  103. cliente é apenas aquele resultado que acabamos de
  104. analisar. O framework de agregação é poderoso, não apenas
  105. devido à funcionalidade que fornece, mas por causa da
  106. velocidade com que consegue executar essas consultas,
  107. pois essa funcionalidade é fundamental para o próprio servidor.