从 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的主要内容,如果未能解决你的问题,请参考以下文章