如何在MongoDB Shell中定义别名?

时间:2015-01-22 16:06:22

标签: mongodb shell alias

我使用MongoDB shell并喜欢定义一些快捷方式。例如,将show databasessd缩进是很好的。

我已经设法将一个函数hw()添加到MongoDB shell中,方法是将其添加到~/.mongorc.js

function hw() {
    print("Hello World.");
}

当我在mongo-shell中输入hw()时,会打印出Hello World.

问题1:是否也可以执行该功能而无需键入括号(即hw而不是hw())?

我尝试使用匿名函数将函数绑定到变量,但仍然需要输入括号,否则打印出函数的定义

hw=function(){ print("Hello World (anonymous)."); };

问题2:如何从我的函数中执行MongoDB命令?我试过了:

function sd() {
    show databases;
}

但是在启动MongoDB shell期间出现错误:

SyntaxError: Unexpected identifier at /home/edward/.mongorc.js:2

2 个答案:

答案 0 :(得分:4)

要列出数据库,请尝试:

function sd(){
     return db._adminCommand( { listDatabases: 1 } ) 
}

基本上你必须在这里运行有效的javascript。请记住,你必须在admin数据库的上下文中运行它们 - runCommand是不够的 - 你必须在这里使用_adminCommand。

有关其他命令,请参阅http://docs.mongodb.org/manual/reference/command/

如果您想摆脱括号,还有一种方法(您必须将属性放在'this'上)

Object.defineProperty(this, 'sd', {
    get: function() { 
        return db._adminCommand( {listDatabases: 1} )
    },
    enumerable: true,
    configurable: true
});

答案 1 :(得分:0)

在mongo shell中别名数据库的另一种方法是使用db.getSiblingDB()命令。在下文中,假设您有两个MongoDB数据库 - AmazonSales和EbaySales。两个数据库都有一个用户集合。您现在可以在Mongo shell中使用如下所述的别名,而不是总是需要'use'命令来切换上下文

var cs = db.getSiblingDB('AmazonSales')
cs.users.count()
cs.users.find({name:'John'})

var r = db.getSiblingDB('EbaySales')
r.users.count()