YouTube

Got a YouTube account?

New: enable viewer-created translations and captions on your YouTube channel!

Chinese, Simplified subtitles

← Multiple Stages Using a Given Operator - Data Wranging with MongoDB

Get Embed Code
4 Languages

Showing Revision 1 created 08/27/2016 by Udacity Robot.

  1. 我希望你们已经清楚

  2. 聚合框架适用于创建数据处理管道
  3. 为达到你的目标
  4. 你可以添加很多阶段
  5. 针对每一个阶段
  6. 你只需要考虑它需要的输入和输出是什么
  7. 我在这里要讲的是 很多任务需要我们
  8. 在多个阶段使用同一个运算符
  9. 例如 为达到我们的目标
  10. 我们往往需要多个分组阶段
  11. 我们再来看另外一个例子
  12. 这一次 我希望你能分别考虑每一个阶段的输入和输出
  13. 我们要改动
  14. 原来的用户提及次数的问题
  15. 这次 我们要看一下哪个用户提到的特殊用户最多
  16. 与我们之前处理
  17. 特殊标签的方法一样
  18. 现在 我们要修改这个管道
  19. 使其只计算我们在分组时
  20. 没有算在内的用户提及次数
  21. 它的代码是这样的 展开阶段和之前一样
  22. 但分组阶段有些不同 你会注意到
  23. 这里还有一个展开阶段和另一个分组阶段
  24. 在第一个分组阶段中
  25. 我们仍在对用户网名进行聚合
  26. 但这次并不是通过简单地计算
  27. 这个分组阶段接收的文件总数
  28. 来计算所有的用户提及次数
  29. 因为展开阶段会针对每个用户提及次数生成一个文件
  30. 我们要做的是
  31. 使用我们之前看到的 addToSet 运算符
  32. 这里 我们关注的是
  33. 推文中提及的用户网名
  34. 所以 我们是在这个分组阶段
  35. 累积这个用户或每个用户
  36. 发送的推文中
  37. 提到的特殊用户数组
  38. 但我们仍然无法得到我们想要的结果
  39. 因为 我们的问题是哪个用户提及的特殊用户最多?
  40. 到目前为止
  41. 我们只有一系列特殊用户的数据
  42. 但没有计算他们的数量
  43. 为此 我们需要思考
  44. 这个分组阶段的输出是什么?
  45. 它的输出就是我们在这里定义的
  46. 此处输出的文件结构
  47. 所有的文件都有一个 _id 字段
  48. 它就是该文件所代表的分组基础
  49. 也就是用户名
  50. 这里还有一个 mset 字段 也就是提及字段
  51. 这个阶段会接收含有 _id 字段和 mset 字段的文件
  52. 它意味着 我们可以在这里再次使用展开运算
  53. 并针对这个数组中的每个项生成一个文件
  54. 同样地 要记住
  55. 这是特殊元素的数组 因为我们是用 addToSet 运算符生成的
  56. 然后 展开运算会针对 mset 字段中的
  57. 每一个输入文件生成一个文件
  58. 然后 这个阶段会展开这个特殊用户的提及数组
  59. 然后将它传递给第二个分组阶段
  60. 我们就是在这第二个分组阶段进行我们需要的计算
  61. 这次 我们不像之前那样
  62. 计算所有的用户提及次数
  63. 而是计算 我们在展开这个数组后
  64. 接收到的特殊提及次数
  65. 所以 第二个分组阶段传递给
  66. 排序阶段的文件将含有一个标识符
  67. 这里其实就是复制了
  68. 这一阶段的输入标识符
  69. 也就是这一阶段生成的标识符
  70. 然后 我们就可以直接计算
  71. 接收到的文件中有多少个文件含有这个标识符
  72. 或者 这一个用户的特殊用户提及次数是多少?
  73. 然后 我们直接根据数量字段
  74. 进行降序排列
  75. 就像我们之前做的那样
  76. 最后 我要将它限制为10
  77. 以便我们观察前十位推特用户的特殊用户提及次数
  78. 我们来运行这个代码
  79. 我们可以看到这个集合中用户的名字
  80. 及其相应的特殊用户提及次数