从 NodeJS 原生 mongodb 驱动程序获取 MongoDB 操作 id 以用于 db.killOp

Posted

技术标签:

【中文标题】从 NodeJS 原生 mongodb 驱动程序获取 MongoDB 操作 id 以用于 db.killOp【英文标题】:Get MongoDB operation id from NodeJS native mongodb driver to use for db.killOp 【发布时间】:2017-03-05 13:40:30 【问题描述】:

我正在寻找一种方法,让用户能够停止在 MongoDB 上长时间运行的查询。 通过 NodeJS 支持的 UI,用户请求 MongoDB 3.2 上实时聚合提供的一些数据。聚合可能需要太多时间,我想让用户取消操作并取消 MongoDB 上的查询执行。

取消查询的方式已知: db.killOp(operationId)

问题是如何从 nodejs 驱动程序中获取特定聚合查询的操作 ID。我使用与 Mongodb 相同的连接来运行所有查询。

【问题讨论】:

【参考方案1】:

使用db.currentOp() 命令列出当前正在进行的每个操作 https://blog.serverdensity.com/mongodb-monitoring-current-operations/

【讨论】:

这是一个边界线link-only answer。您应该在此处扩展您的答案以包含尽可能多的信息,并使用该链接仅供参考。【参考方案2】:

您可以使用executeDbAdminCommand 命令执行管理操作

db.executeDbAdminCommand("killOp":1, "op": operationId)

如果operationId未知,您可以列出所有操作,使用currentOp检索当前或所有操作

【讨论】:

我有 10 个用户同时运行聚合。用户 X 按“取消”,我需要取消该用户的聚合查询。我应该为 killOp 使用什么操作 ID?此外,所有用户都有相同的聚合管道。 哦,这是一个完全不同的问题,甚至与nodejs无关。 我建议您使用此特定域创建另一个问题。这个问题表明您的问题出在 node.js 和 mondodb 驱动程序上,这似乎不是真的,或者,一旦您解决了其他问题,将来就会出现问题 如果 nodejs 驱动程序在我发出 db.collection('X').aggregate(pipeline.cb) 时可以返回无论如何操作 id,我没问题。

以上是关于从 NodeJS 原生 mongodb 驱动程序获取 MongoDB 操作 id 以用于 db.killOp的主要内容,如果未能解决你的问题,请参考以下文章

mongodb nodejs原生驱动是不是关闭连接

何时在 Nodejs 中关闭 MongoDB 数据库连接

使用日期从 mongodb-nodejs 驱动程序获取文档

将值从后端 nodejs 传递到前端反应原生

mongodb驱动的正确使用方法

nodejs使用mongodb做数据持久化