[关闭]
@JunQiu 2018-09-18T11:23:47.000000Z 字数 2415 阅读 1135

MAC(终端)快捷键、mongo_mongodb聚合(aggregation、mapReduce)

summary_2018/07 other mongodb


1、日常工作

1.1、解决trace-ad-roi服务mongo:3.1.0->3.1.1d的版本bug
1.2、MAC(终端)一些实用的快捷键
1.3、mongodb聚合

2、技术学习

2.1、解决trace-ad-roi服务mongo:3.1.0->3.1.1d的版本bug
  1. ### some Instructions
  2. // 查看image中一些以来的版本
  3. docker inspect <hash> //没有,可以到container中npm list查看
1.2、MAC(终端)一些实用的快捷键
  1. Ctrl + a // 跳到行首
  2. Ctrl + e // 跳到行尾
  3. Ctrl + d // 删除一个字符,相当于通常的Delete键(命令行若无所有字符,则相当于exit;处理多行标准输入时也表示eof)
  4. Ctrl + u // 删除光标之前到行首的字符
  5. Ctrl + k // 删除光标之前到行尾的字符
  6. Ctrl + l // 清屏,相当于执行clear命令
  7. Ctrl + 方向 //缩放界面程序
  8. 终端分屏:详见见tool_shell_iterm
2.3、mongodb 聚合
2.3.1、聚合管道:基于流水线方式的处理
  1. # 聚合管道
  2. # 聚合管道的优化
  3. 核心思想:让尽量少的数据到达后面的管道中
  4. 1Projection Optimization
  5. 聚合管道可以确定它是否仅需要文档中的字段的子集来获得结果。如果是这样,管道将只使用那些必需的字段,减少通过管道的数据量。(减少字段)
  6. 2Pipeline Sequence Optimization
  7. // 尽早通过$match过滤掉不需要的文档,以减少处理的数据量,如:$sort+ $match
  8. // $skip+ $limit:可以先进行limit,再进行skip
  9. // $project+ $skip或$limit:先进行limit
  10. // $skip + $skip
  11. # 管道的限制
  12. 1、结果大小限制
  13. aggregate命令可以返回游标或将结果存储在集合中。返回游标或将结果存储在集合中时,结果集中的每个文档都受限制,目前为16兆字节; 如果任何单个文档超出 限制,该命令将产生错误。该限制仅适用于返回文档; 在管道处理期间,文档可能超过此大小。
  14. 在版本3.6中更改: MongoDB 3.6删除了aggregate 命令的选项,以将其结果作为单个文档返回。
  15. 2、内存限制
  16. 2.6版中更改:
  17. 管道阶段的RAM限制为100兆字节。如果某个阶段超出此限制,MongoDB将产生错误。要允许处理大型数据集,请使用该allowDiskUse选项启用聚合管道阶段以将数据写入临时文件。
  18. 3.4中更改:
  19. The $graphLookup stage must stay within the 100 megabyte memory limit. If allowDiskUse: true is specified for the aggregate() operation, the $graphLookup stage ignores the option. If there are other stages in the aggregate() operation, allowDiskUse: true option is in effect for these other stages.(allowDiskUse: true会被忽略在 in $graphLookup(递归搜索) stage
  20. # 聚合管道和分片:聚合管道支持在业务分片集合
  21. 3.2更改:
  22. 如果管道以分片$match键上的精确开头,则整个管道仅在匹配的分片上运行。以前,管道将被拆分,合并它的工作必须在主分片上完成。
  23. (暂时不过多了解。。。。。)
2.3.2、Map-Reduce
  1. # map:映射并提交一个键值对
  2. # reduce:一个键的所有值合并到一个单独的数组中
  3. # Example
  4. 集合:
  5. {
  6. "post_text": "tutorialspoint is an awesome website for tutorials",
  7. "user_name": "mark",
  8. "status":"active"
  9. }
  10. //mapreduce
  11. >db.posts.mapReduce(
  12. function() { emit(this.user_id,1); # 生成键值对},
  13. # values 数组形式 [1,2,3,4]
  14. # key:values {a:[1,2,3]}
  15. function(key, values) {return Array.sum(values)},
  16. {
  17. query:{status:"active"},
  18. out:"post_total"
  19. }
  20. )
  21. 结果:
  22. {
  23. "result" : "post_total",
  24. "timeMillis" : 9,
  25. "counts" : {
  26. "input" : 4,
  27. "emit" : 4,
  28. "reduce" : 2,
  29. "output" : 2
  30. },
  31. "ok" : 1,
  32. }
  33. 只有 4 个文档符合查询条件(status:"active"),于是 map 函数就生成了 4 个带有键值对的文档,而最终 reduce 函数将具有相同键值的映射文档变为了 2 个。
  34. //查看查询结果使用find():
  35. { "_id" : "tom", "value" : 2 }
  36. { "_id" : "mark", "value" : 2 }
  37. (暂时不过多了解。。。。。)
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注