首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >mongodb客户端如何保存发送到数据库的操作id,以便在事后终止它

mongodb客户端如何保存发送到数据库的操作id,以便在事后终止它
EN

Stack Overflow用户
提问于 2017-06-02 03:40:06
回答 1查看 85关注 0票数 1

我想取消一个发送到mongodb的操作:

我尝试在查询中添加一个$comment,并使用:

代码语言:javascript
代码运行次数:0
运行
复制
db.currentOp({"query.filter.$comment" : "127.0.0.1"})

currentOp输出示例:

代码语言:javascript
代码运行次数:0
运行
复制
(...)
"query" : {
    "find" : "collectionName",
    "filter" : {
        "$comment" : "127.0.0.1",
        "field1" : "example of field1 value"
    }
(...)

但是,如果查询太大,有很多字段或大字符串,那么mongo db.currentOp()命令就不起作用。

代码语言:javascript
代码运行次数:0
运行
复制
"query" : {
            "$msg" : "query not recording (too large)"
          }

我知道慢查询可以取消,但我想要做的是杀死用户所做的操作,但我需要将发送到mongodb的opid保存在客户端。

EN

回答 1

Stack Overflow用户

发布于 2020-11-19 21:10:04

当我试图弄清楚同样的事情时,偶然发现了你的问题。经过一些研究,似乎很难做到这一点。

查看Wire Protocol,您可以看到,当执行查询时,客户端将得到的唯一响应是一个OP_REPLY。但是,这不包含opId (并且也仅在处理后发送)。

OP_REPLY中包含的字段包括具有responseTo属性的标准消息头。此属性的值设置为客户端最初发送到服务器的requestID值。因为这个值是由客户机生成的( NodeJS驱动程序只使用一个递增整数),所以它与您正在寻找的opId不同。

识别所执行查询的opId的惟一方法可能是使用$currentOp的输出进行一些关联。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44315827

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档