翻译或纠错本页面

配置 mongo Shell

自定义提示符

你可以通过在 mongo shell 中设置变量 prompt 的值来修改提示符的内容。prompt 变量可以存储字符串以及JavaScript代码。 如果 prompt 为返回字符串的函数, mongo 则会在每个提示符中展示动态信息。

你可以在 .mongorc.js 文件中增加提示符的逻辑操作来设置每次启动 mongo shell时的提示符。

自定义提示符展示操作数

例如,为了创建一个显示当前会话中操作数的 mongo shell,在 mongo shell 中定义以下变量:

cmdCount = 1;
prompt = function() {
             return (cmdCount++) + "> ";
         }

提示符将会类似下面:

1>
2>
3>

自定义提示符显示数据库和主机名

为创建形式为 <database>@<hostname>$mongo shell 提示符,定义下列变量:

host = db.serverStatus().host;

prompt = function() {
             return db+"@"+host+"$ ";
         }

提示符将会类似下面:

test@myHost1$

自定义提示符展示服务器的启动时间以及文档数

创建一个包含系统启动时间 以及 当前数据库中文档数的 mongo shell 提示符,在 mongo shell 中定义下面的 prompt 变量值:

prompt = function() {
           return "Uptime:"+db.serverStatus().uptime+" Documents:"+db.stats().objects+" > ";
         }

提示符将会类似下面:

Uptime:5897 Documents:6 >

mongo Shell 中使用外部编辑器

你可以通过在启动 mongo shell 之前 设置 EDITOR 环境变量来在 mongo shell 中使用自己的编辑器。

export EDITOR=vim
mongo

一旦进入 mongo shell 中,你可以通过输入 edit <variable> 或者 edit <function> 使用特定的编辑器进行编辑,和下面的示例一下:

  1. 定义一个函数 myFunction

    function myFunction () { }
    
  2. 使用你的编辑器编辑函数:

    edit myFunction
    

    命令应该打开 vim 编辑会话。当编辑完成之后,保存并退出 vim 编辑会话。

  3. mongo shell 中, 输入 myFunction 在查看函数定义:

    myFunction
    

    结果应该是保存后的编辑结果。

    function myFunction() {
        print("This was edited");
    }
    

注解

由于 mongo shell 编译了外部编辑器中编辑的代码,基于JavaScript的编译器,它可能会修改函数中的代码。 mongo 可能会将 1+1 转化为 2 或者删除评论。实际的修改只会影响代码的显示以及基于使用的JavaScript版本进行修改,但是不会影响代码的语义。

修改 mongo Shell 批处理大小

The db.collection.find() method is the JavaScript method to retrieve documents from a collection. The db.collection.find() method returns a cursor to the results; however, in the mongo shell, if the returned cursor is not assigned to a variable using the var keyword, then the cursor is automatically iterated up to 20 times to print up to the first 20 documents that match the query. The mongo shell will prompt Type it to iterate another 20 times.

你可以设置 DBQuery.shellBatchSize 属性来修改默认的 20 篇文档数,类似于下面的案例,将默认值设为 10

DBQuery.shellBatchSize = 10;