//
Mongo Shell小技巧
//
今天我们看看Mongo Shell的一些有意思的设置。
01
定制你自己的Mongo Shell提示
在MongoDB中,我们经常会和mongo shell打交道,通常情况下,我们不会修改mongo shell的配置,因为原生的配置已经足够我们应对日常中的问题了。
今天我们看一些有意思的现象。
1、配置行数
在mongo shell中配置当前shell的行数,可以记录本次登录一共执行了多少个命令,配置方法如下:
mongos> cmdCount = 1; 1 mongos> prompt = function() { ... return (cmdCount++) + "> "; ... } function () { return (cmdCount++) + "> "; } 1> show databases; admin 0.000GB config 0.002GB new 0.000GB 2> use admin switched to db admin 3> show tables; test1 4> 5> 6> 7> 8>
我们使用cmdCount自增的方式,来显示当前的命令是第几个命令。
2、配置db和端口信息。
有的时候,通过mongo shell进入了MongoDB之后,想要观察当前所在的db以及当前实例的端口信息,我们通常会通过db命令和db.serverStatus().host命令来看,这样可能不够直观,就可以设置为下面的模式:
mongos> host = db.serverStatus().host; VM-0-14-centos:27016 mongos> mongos> prompt = function() { ... return db+"@"+host+"-----^_^----> "; ... } function () { return db+"@"+host+"-----^_^----> "; } test@VM-0-14-centos:27016-----^_^----> test@VM-0-14-centos:27016-----^_^----> test@VM-0-14-centos:27016-----^_^----> test@VM-0-14-centos:27016-----^_^----> test@VM-0-14-centos:27016-----^_^----> test@VM-0-14-centos:27016-----^_^----> show databases; admin 0.000GB config 0.002GB new 0.000GB test@VM-0-14-centos:27016-----^_^----> use admin switched to db admin admin@VM-0-14-centos:27016-----^_^----> admin@VM-0-14-centos:27016-----^_^----> admin@VM-0-14-centos:27016-----^_^----> admin@VM-0-14-centos:27016-----^_^---->
可以看到,我们设置了一个笑脸的表情,^_^,从前缀的提示不难看出来,当前处于哪个db下,以及当前实例的端口信息等。
02
mongo shell引入vim工具
有时候我们想要输入或者修改一个函数,在Mongo Shell中直接编辑这个函数不是特别方便,这个时候,就可以在mongo shell中引入vim 工具,从而实现直接通过vim编辑函数的目的。
[root@VM-0-14-centos ~]# export EDITOR=vim [root@VM-0-14-centos ~]# shard_login 27016 MongoDB shell version v4.0.6 connecting to: mongodb://127.0.0.1:27016/?authSource=admin&gssapiServiceName=mongodb Implicit session: session { "id" : UUID("88bc9be8-afc3-4f65-8763-dea7dd418250") } MongoDB server version: 4.0.6 mongos> function myFunction () { } mongos> edit myFunction mongos> myFunction function myFunction() { print("hello world") } mongos> edit hello mongos>
整个过程解释如下:
1、我们通过export导入vim为内置编辑器,
2、先定义一个myFunction的函数,
3、使用edit + 函数名字来编辑这个函数,此时会自动打开一个文本,文本中的内容就是上面我们定义的函数内容。
4、编辑文本,补充内容,重新输入函数名称,发现函数已经变成我们编辑后的文本了。
注意,如果一个函数没有定义,就使用edit,则会新生成一个文件,这个文件里面写着undefined.编辑文本内容之后,会生成一个新的函数。
03
增加缓冲区大小
当一个表中的数据量很大的时候,缓冲区默认只保留20行数据,想继续看,必须输入it,很不方便,如下:
mongos> db.test.find() { "_id" : ObjectId("6006c46993a711b384cc8c92"), "number" : 1000 } { "_id" : ObjectId("6006c46993a711b384cc8c93"), "number" : 1001 } { "_id" : ObjectId("6006c46993a711b384cc8c94"), "number" : 1002 } { "_id" : ObjectId("6006c46993a711b384cc8c95"), "number" : 1003 } { "_id" : ObjectId("6006c46993a711b384cc8c96"), "number" : 1004 } { "_id" : ObjectId("6006c46993a711b384cc8c97"), "number" : 1005 } { "_id" : ObjectId("6006c46993a711b384cc8c98"), "number" : 1006 } { "_id" : ObjectId("6006c46993a711b384cc8c99"), "number" : 1007 } { "_id" : ObjectId("6006c46993a711b384cc8c9a"), "number" : 1008 } { "_id" : ObjectId("6006c46993a711b384cc8c9b"), "number" : 1009 } { "_id" : ObjectId("6006c46993a711b384cc8c9c"), "number" : 1010 } { "_id" : ObjectId("6006c46993a711b384cc8c9d"), "number" : 1011 } { "_id" : ObjectId("6006c46993a711b384cc8c9e"), "number" : 1012 } { "_id" : ObjectId("6006c46993a711b384cc8c9f"), "number" : 1013 } { "_id" : ObjectId("6006c46993a711b384cc8ca0"), "number" : 1014 } { "_id" : ObjectId("6006c46993a711b384cc8ca1"), "number" : 1015 } { "_id" : ObjectId("6006c46993a711b384cc8ca2"), "number" : 1016 } { "_id" : ObjectId("6006c46993a711b384cc8ca3"), "number" : 1017 } { "_id" : ObjectId("6006c46993a711b384cc8ca4"), "number" : 1018 } { "_id" : ObjectId("6006c46993a711b384cc8ca5"), "number" : 1019 } Type "it" for more
其实我们可以通过设置参数来控制它输入的缓冲行数,例如:
mongos> DBQuery.shellBatchSize = 4; 4 mongos> db.test.find() { "_id" : ObjectId("6006c46993a711b384cc8c92"), "number" : 1000 } { "_id" : ObjectId("6006c46993a711b384cc8c93"), "number" : 1001 } { "_id" : ObjectId("6006c46993a711b384cc8c94"), "number" : 1002 } { "_id" : ObjectId("6006c46993a711b384cc8c95"), "number" : 1003 } Type "it" for more
这样就可以将它设置成4行,当然,你可以可以往大的改。