node.js - 如何通过driver获取Mongodb中的连接

标签 node.js mongodb perl

我工作的系统使用 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/

相关文章:

javascript - SEQUELIZE 插入行时不会自动递增 id?

node.js - ReactJS : Async function with axios call makes axios call in componentDidUpdate to return promise

database - 如何在 $lookup 管道中使用 $text 搜索

java - Mongo 3.2 Java 驱动程序 - 查找和计数操作

regex - 如何在执行时在 perl 脚本中显示子例程的数量及其名称?

perl HTTP::GHTTP 设置传出 ip

java - Typescript 中的工厂模式并仅公开工厂类

node.js - 来自 Electron 的 Node 服务的 Windows 通知

php - 将用户数据从 PHP 同步到 meteor 应用程序

arrays - 从 AJAX 请求迭代 Perl 数组