如何从javascript执行mongo shell命令

时间:2014-02-05 00:40:19

标签: mongodb

在mongo shell窗口中,我想定期运行一个脚本,显示数据库活动的各种统计信息,然后显示统计信息,我想清除屏幕。 mongo shell中有一个“cls”命令,但是我无法在javascript中执行它。

function stats () {
while(1) {
    cls;
    print("display stats");
    sleep(5000);
}}

无法识别带有“cls”的行。

感谢您的任何建议, 加里

2 个答案:

答案 0 :(得分:2)

乍一看,你似乎无法做到这一点。根据文档here:“您不能在JavaScript文件中使用任何shell帮助程序(例如use,show dbs等),因为它们不是有效的JavaScript。”。

一个选项是用空行填充屏幕:

function clearIt () { for(var i = 0; i < 100; i++) { print() } }
clearIt()

但是,感谢@NeilLunn指出它似乎有一个解决方案:

function clearIt () { run('clear') }
clearIt()

执行系统命令将清除终端屏幕。我不知道它有多可靠(参见man clear - &gt;取决于它是否可以弄清楚如何清除屏幕),这仅适用于POSIX系统。在Windows上,您必须将clear替换为cls

function clearIt () { run('cls') }

其他:

我查了mongo shell的源代码(src / mongo / shell / linenoise.cpp)。以下是清除屏幕的方式:

void linenoiseClearScreen( void ) {
#ifdef _WIN32
    COORD coord = {0, 0};
    CONSOLE_SCREEN_BUFFER_INFO inf;
    HANDLE screenHandle = GetStdHandle( STD_OUTPUT_HANDLE );
    GetConsoleScreenBufferInfo( screenHandle, &inf );
    SetConsoleCursorPosition( screenHandle, coord );
    DWORD count;
    FillConsoleOutputCharacterA( screenHandle, ' ', inf.dwSize.X * inf.dwSize.Y, coord, &count );
#else
    if ( write( 1, "\x1b[H\x1b[2J", 7 ) <= 0 ) return;
#endif
}

如果您想通过使用字符填充屏幕来尝试实现自己的屏幕清理功能。

答案 1 :(得分:0)

> help admin
    ls([path])                      list files
    pwd()                           returns current directory
    listFiles([path])               returns file list
    hostname()                      returns name of this host
    cat(fname)                      returns contents of text file as a string
    removeFile(f)                   delete a file or directory
    load(jsfilename)                load and execute a .js file
    run(program[, args...])         spawn a program and wait for its completion
    runProgram(program[, args...])  same as run(), above
    sleep(m)                        sleep m milliseconds
    getMemInfo()                    diagnostic

这会显示runrunProgram命令以及其他一些帮助程序。 program参数是一个字符串。