Chinese, Simplified feliratok

← Unwind Operator - Data Wranging with MongoDB

Beágyazókód kérése
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. 返回实体子文件中用户提及字段的长度为3的文件
  20. 我把它打出来 如果我们把页面向上拉
  21. 我们可以看到
  22. 这个例子中确实有三个用户提及次数
  23. 为了让你充分理解 实体其实位于这个字段的上方
  24. 它将子文件作为值
  25. 而用户提及是这个实体子文件的一个字段
  26. 用户提及是一个数组值字段
  27. 我们可以看到
  28. 它含有形式类似于这个的文件
  29. 我们感兴趣的是这里的这些网名
  30. 因为 这条推特中提到了这些用户名
  31. 每出现提及一个用户的推文
  32. 你就会有一个含有这种文件的数组
  33. 它会说明所提及的用户
  34. 我们要找出的是
  35. 某一个 Twitter 用户提及的所有用户数量
  36. 我们需要查看所有的推文
  37. 这里当然还会涉及到分组
  38. 因为我们需要将同一用户的推特分为一组
  39. 但我们还想计算用户提及的次数
  40. 针对这个问题 展开运算符是一个非常方便的工具
  41. 这就是我们的聚合管道
  42. 我们的第一个阶段利用展开运算符
  43. 它是针对用户提及字段运行的
  44. 记住 展开的作用是
  45. 复制每个含有数组字段的文件
  46. 它会复制所有的字段
  47. 只有数组中的数据项除外
  48. 它会为数组中的每个元素创建一个副本
  49. 而所有副本的唯一区别就是
  50. 这个字段会在生成的文件中
  51. 载入数组中的每个值
  52. 我用具体的例子来讲解一下
  53. 我们再来看一下这条推文
  54. 针对这条推文的文件 展开阶段会生成三个输出文件
  55. 我们在这里看到的所有其它字段
  56. 以及这个推文文件中的其它数据都不变
  57. 它唯一的区别就是
  58. 在这条推文的三个副本中
  59. 用户提及字段的值都是一个单独的文件
  60. 在第一个副本中 它的值是这个
  61. 在第二个副本中 它的值是这个
  62. 而在第三个副本中 它的值是这个
  63. 在传递给下一阶段的文件中 也就是这里的分组阶段
  64. 这些文件的用户提及字段会有不同的值
  65. 在这个例子中
  66. 我们关注的是拆分的效果
  67. 而不是每次用户提及次数的具体值
  68. 因为 我们在下一个阶段要做的是
  69. 计算传递给下一阶段的所有文件数量
  70. 在这些文件中
  71. 创建这个推文的用户都拥有相同的网名
  72. 因为 我们要记住
  73. 这里的问题是 哪个用户推文中含有最多的用户提及次数有?
  74. 所以 在我们进入这个阶段时
  75. 展开阶段已经针对数据中的
  76. 每个用户提及次数生成了单独的文件
  77. 然后 分组阶段会根据创建该推文的用户网名
  78. 对这些文件进行聚合
  79. 然后 作为分组运算的一部分
  80. 它会在这里生成一个数量字段
  81. 不要忘了 每当出现经过聚合的文件拥有同样的网名
  82. 或拥有同样网名的文件
  83. 总数都会加上1
  84. 然后 我们进行排序和限制的运算
  85. 我要问你的一个问题是
  86. 这个做法计算的是特殊的用户提及次数吗?
  87. 也就是说 如果一位推特用户
  88. 多次提及同一个用户
  89. 它会计算所有的提及次数
  90. 还是把提到同一用户的提及次数算作一次?
  91. 如果这里计算的不是特殊的提及次数
  92. 那么 我要问你
  93. 如果要计算特殊的提及次数
  94. 我们需要构建什么样的聚合管道?
  95. 我们现在运算这个代码 由于我们限制了数量为1
  96. 所以 我们在结果数组中只得到了一个文件
  97. 这个用户的用户提及次数是21次
  98. 如果你仍然不太清楚
  99. MongoDB 中聚合框架的优点是
  100. 所有这些工作都是在服务器端完成的
  101. 这意味着 就这次查询而言
  102. 我们的客户通过网络接收到的结果
  103. 只是我们刚才看到的那一条结果
  104. 聚合框架的作用十分强大
  105. 这不仅仅是源于它提供多项功能
  106. 还因为它执行这些查询的速度很快
  107. 这个功能对于服务器来说至关重要