我正在使用mongo编写应用程序作为其数据库。我想打印连接到db的客户端,例如,打印他们的ip。我怎样才能获得这些信息?
我尝试使用
db.serverStatus().connections
但是它给了我可以访问我的数据库的计算机数量。
答案 0 :(得分:12)
您应该能够运行此命令并获取已连接IP地址的列表:
db.currentOp(true).inprog.forEach(function(d){if (d.client)printjson(d.client)})
db.currentOp实际上是在特殊集合$ cmd.sys.inprog之上构建的,因此您也可以直接查询它。您可以通过在没有括号的db.currentOp中键入mongo shell来了解如何执行此操作,它将打印出该函数的源代码:
> db.currentOp
function ( arg ){
var q = {}
if ( arg ) {
if ( typeof( arg ) == "object" )
Object.extend( q , arg );
else if ( arg )
q["$all"] = true;
}
return this.$cmd.sys.inprog.findOne( q );
}
答案 1 :(得分:8)
您可以使用db.currentOp(true)
并使用inprog
字段迭代结果集的client
数组。
答案 2 :(得分:0)
这有点hacky,但你实际上可以通过netstat
得到这个,即使没有连接到数据库。这将在DB服务器上的(bash)shell脚本中完成。我实际上在我的登录脚本(〜/ .bash_profile)中有这个,这样我就可以轻松(并且快速)找到进入MongoDB和TCP上运行的任何其他服务的网络连接。
首先,您将在shell中运行它,它定义了一个函数。
function whoIsConnectedToPort () {
PORT=$1
netstat -an | grep ":${PORT}.*ESTAB" | awk '{print $4":"$5}' | cut -d: -f2- | grep "^${PORT}:" | cut -d: -f2 | grep -v '^127' | sort | uniq | xargs -n1 nslookup | grep 'name =' | awk {'print $NF'} | sed 's/.$//' | sort | uniq
}
然后调用该函数。
whoIsConnectedToPort 27017
这应该返回连接到给定端口的主机列表。
您可以将其重复用于其他熟悉的端口。试试例如:
whoIsConnectedToPort 22
whoIsConnectedToPort 3306
whoIsConnectedToPort 1521