You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Go获取MongoDB 5.x以下版本当前操作无结果的问题咨询

问题

使用Go语言调用currentOp命令获取MongoDB 3/4版本的当前操作时,inprog字段始终无结果返回,但MongoDB 5及以上版本执行相同代码能正常得到结果。同一数据库用Java和Compass工具却能获取有效结果,请问原因是什么?

相关代码

var currentOpsResult CurrentOpsOutput
err := client.Database("admin").RunCommand(context.TODO(), bson.D{{"currentOp", 1}}).Decode(&currentOpsResult)

if err != nil {
    fmt.Println("Error executing aggregate command:", err)
    return nil, nil
}

type CurrentOpsOutput struct {
    Inprog []FirstBatchItem `json:"inprog"`
}

type FirstBatchItem struct {
    Active            bool            `json:"active"`
    Client            string          `json:"client"`
    ClientMetadata    ClientMetadata  `json:"clientMetadata"`
    ConnectionID      int             `json:"connectionId"`
    CurrentOpTime     time.Time       `json:"currentOpTime"`
    Op                string          `json:"op"`
    Type              string          `json:"type"`
    Microsecs_running int             `json:"microsecs_running"`
    Desc              string          `json:"desc"`
    AppName           string          `json:"appName"`
    Host              string          `json:"host"`
    Secs_running      int             `json:"secs_running"`
    NS                string          `json:"ns"`
    EffectiveUsers    []EffectiveUser `json:"effectiveUsers"`
    RunBy             []EffectiveUser `json:"runBy"`
}
原因及解决方案
  • 字段映射标签错误:Go的MongoDB驱动默认使用bson标签来映射MongoDB返回的字段,而你的结构体用了json标签。MongoDB 3/4版本返回的inprog字段无法被正确映射到结构体的Inprog字段,导致结果为空;MongoDB 5+可能在驱动兼容或字段处理上有宽松逻辑,所以能正常返回。
  • 验证方式:可以先将结果解码到bson.M类型并打印,确认inprog字段确实存在,就能验证是标签映射的问题。

修复方法:把结构体的标签全部替换为bson标签,修改后的代码如下:

type CurrentOpsOutput struct {
    Inprog []FirstBatchItem `bson:"inprog"`
}

type FirstBatchItem struct {
    Active            bool            `bson:"active"`
    Client            string          `bson:"client"`
    ClientMetadata    ClientMetadata  `bson:"clientMetadata"`
    ConnectionID      int             `bson:"connectionId"`
    CurrentOpTime     time.Time       `bson:"currentOpTime"`
    Op                string          `bson:"op"`
    Type              string          `bson:"type"`
    Microsecs_running int             `bson:"microsecs_running"`
    Desc              string          `bson:"desc"`
    AppName           string          `bson:"appName"`
    Host              string          `bson:"host"`
    Secs_running      int             `bson:"secs_running"`
    NS                string          `bson:"ns"`
    EffectiveUsers    []EffectiveUser `bson:"effectiveUsers"`
    RunBy             []EffectiveUser `bson:"runBy"`
}

修改后Go驱动就能正确映射MongoDB返回的字段,在MongoDB 3/4版本中也能正常获取inprog的结果。

内容的提问来源于stack exchange,提问作者Vaishakh S

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 23:00:18