我工作的系统使用 Mongo 中的连接表(inprog
数组)来监视和控制系统可用性和并发性。这是通过精彩的 $cmd.sys.inprog
集合实现的。
可以从 mongo
客户端获取已连接客户端的详细列表:
db.getCollection('$cmd.sys.inprog').findOne({ $all: 1 }).inprog
使用 Perl 驱动程序,我能够运行该命令的唯一方法是:
$db->eval( q{ db.getCollection('$cmd.sys.inprog').findOne({ $all: 1 }) } )->{ inprog };
但现在 eval
已被弃用,并在我们的 Mongo 日志中生成大量弃用警告。
以下替代方法在 Perl 驱动程序中不起作用:
$db->get_collection('$cmd.sys.inprod')->find_one({ '$all': 1 })->{inprog};
# fails with "Invalid collection name"
都不是来自 Node Mongo 驱动程序,因此它不仅仅是 Perl 驱动程序:
db.collection('$cmd.sys.inprog').findOne({$all:1});
# fails with invalid connection name just the same
此外,我找不到可以执行此操作的 $db->run_command(...)
。
除了 eval
之外,还有其他方法可以获取可在 Mongo 驱动程序中使用的 inprog
列表吗?
最佳答案
该集合名称不是真正的集合;它是一个伪命令,在 3.6 服务器中被删除 SERVER-30181 。您可以使用 currentOp命令代替。
请注意,currentOp 最终会消失,取而代之的是 $currentOp聚合阶段。这可以在 shell 中使用 db.aggregate 实现,但驱动程序当前不支持数据库级(相对于集合级)聚合管道。 (该功能目前已在 4.2 时代驱动程序的路线图中。)
关于node.js - 如何通过driver获取Mongodb中的连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52623942/