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

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

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

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

【问题讨论】:

    标签: node.js mongodb aggregation-framework


    【解决方案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,我没问题。
    猜你喜欢
    • 2016-11-09
    • 2017-09-04
    • 2020-05-08
    • 1970-01-01
    • 2014-06-29
    • 2013-04-24
    • 1970-01-01
    • 2016-03-13
    • 2015-06-07
    相关资源
    最近更新 更多