@JunQiu
2018-09-18T19:23:47.000000Z
字数 2415
阅读 1233
summary_2018/07
other
mongodb
### some Instructions
// 查看image中一些以来的版本
docker inspect <hash> //没有,可以到container中npm list查看
Ctrl + a // 跳到行首
Ctrl + e // 跳到行尾
Ctrl + d // 删除一个字符,相当于通常的Delete键(命令行若无所有字符,则相当于exit;处理多行标准输入时也表示eof)
Ctrl + u // 删除光标之前到行首的字符
Ctrl + k // 删除光标之前到行尾的字符
Ctrl + l // 清屏,相当于执行clear命令
Ctrl + 方向 //缩放界面程序
终端分屏:详见见tool_shell_iterm
# 聚合管道
# 聚合管道的优化
核心思想:让尽量少的数据到达后面的管道中
1、Projection Optimization
聚合管道可以确定它是否仅需要文档中的字段的子集来获得结果。如果是这样,管道将只使用那些必需的字段,减少通过管道的数据量。(减少字段)
2、Pipeline Sequence Optimization
// 尽早通过$match过滤掉不需要的文档,以减少处理的数据量,如:$sort+ $match
// $skip+ $limit:可以先进行limit,再进行skip
// $project+ $skip或$limit:先进行limit
// $skip + $skip
# 管道的限制
1、结果大小限制
aggregate命令可以返回游标或将结果存储在集合中。返回游标或将结果存储在集合中时,结果集中的每个文档都受限制,目前为16兆字节; 如果任何单个文档超出 限制,该命令将产生错误。该限制仅适用于返回文档; 在管道处理期间,文档可能超过此大小。
在版本3.6中更改: MongoDB 3.6删除了aggregate 命令的选项,以将其结果作为单个文档返回。
2、内存限制
在2.6版中更改:
管道阶段的RAM限制为100兆字节。如果某个阶段超出此限制,MongoDB将产生错误。要允许处理大型数据集,请使用该allowDiskUse选项启用聚合管道阶段以将数据写入临时文件。
3.4中更改:
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)
# 聚合管道和分片:聚合管道支持在业务分片集合
3.2更改:
如果管道以分片$match键上的精确开头,则整个管道仅在匹配的分片上运行。以前,管道将被拆分,合并它的工作必须在主分片上完成。
(暂时不过多了解。。。。。)
# map:映射并提交一个键值对
# reduce:一个键的所有值合并到一个单独的数组中
# Example
集合:
{
"post_text": "tutorialspoint is an awesome website for tutorials",
"user_name": "mark",
"status":"active"
}
//mapreduce
>db.posts.mapReduce(
function() { emit(this.user_id,1); # 生成键值对},
# values 数组形式 [1,2,3,4]
# key:values {a:[1,2,3]}
function(key, values) {return Array.sum(values)},
{
query:{status:"active"},
out:"post_total"
}
)
结果:
{
"result" : "post_total",
"timeMillis" : 9,
"counts" : {
"input" : 4,
"emit" : 4,
"reduce" : 2,
"output" : 2
},
"ok" : 1,
}
只有 4 个文档符合查询条件(status:"active"),于是 map 函数就生成了 4 个带有键值对的文档,而最终 reduce 函数将具有相同键值的映射文档变为了 2 个。
//查看查询结果使用find():
{ "_id" : "tom", "value" : 2 }
{ "_id" : "mark", "value" : 2 }
(暂时不过多了解。。。。。)