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

如何以美观格式查看mgo的bson.Raw及调试输出BSON数据?

解决mgo获取的BSON数据控制台调试输出问题

嘿,我刚好碰到过和你一样的调试需求,给你几个实用的办法来把mgo获取的BSON数据清晰输出到控制台:

方法1:使用扩展JSON格式化输出(保留BSON类型信息)

如果你希望输出的内容既易读,又能保留BSON特有的类型(比如ObjectID、日期、二进制数据这些JSON无法原生表示的类型),可以用bson.MarshalExtJSON方法,它能把BSON转成带类型标记的扩展JSON,非常适合调试。

示例代码:

import (
    "fmt"
    "time"
    // 旧版mgo用这个导入
    // "gopkg.in/mgo.v2/bson"
    // 新版官方驱动用这个(很多项目已经迁移到这里)
    "go.mongodb.org/mongo-driver/bson"
)

func main() {
    // 假设doc是你从mgo查询到的BSON文档(bson.M或者自定义结构体实例)
    doc := bson.M{
        "_id":        bson.NewObjectId(),
        "name":       "Kurayami",
        "age":        30,
        "created_at": time.Now(),
    }

    // 第二个参数设为true表示添加缩进,第三个参数设为true表示输出类型信息
    jsonBytes, err := bson.MarshalExtJSON(doc, true, true)
    if err != nil {
        panic(err)
    }
    fmt.Println(string(jsonBytes))
}

输出结果会像这样(带清晰缩进和类型标记):

{
  "_id": {"$oid": "60d21b4667d0d8992e610c85"},
  "name": "Kurayami",
  "age": 30,
  "created_at": {"$date": 1624390470123}
}

方法2:旧版mgo专属的bson.Dump函数(一键打印调试信息)

如果你用的是旧版的mgo库(gopkg.in/mgo.v2),它自带了一个bson.Dump函数,专门用来快速打印BSON文档的调试信息,不需要自己处理序列化,直接输出到控制台。

示例代码:

import (
    "gopkg.in/mgo.v2/bson"
)

func main() {
    doc := bson.M{"name": "test", "age": 25, "active": true}
    // 直接调用Dump,会自动格式化输出到stdout
    bson.Dump(doc)
}

输出会是类似这样的结构化内容:

---
{
    "name": "test",
    "age": 25,
    "active": true
}

方法3:处理原始BSON字节数组的情况

如果你拿到的是从MongoDB直接读取的原始BSON字节数组([]byte类型),可以先把它反序列化成bson.M(或者对应的结构体),再用上面的方法输出:

import (
    "fmt"
    "gopkg.in/mgo.v2/bson"
)

func main() {
    // 假设rawBson是你获取的原始BSON字节
    var rawBson []byte = []byte{/* 你的BSON字节数据 */}
    
    var doc bson.M
    err := bson.Unmarshal(rawBson, &doc)
    if err != nil {
        panic(err)
    }
    
    // 然后用Dump或者MarshalExtJSON输出
    bson.Dump(doc)
}

对比你处理JSON的方式,这些方法就是BSON调试的等效方案——bson.MarshalExtJSON类似json.MarshalIndent,而bson.Dump则是更轻量化的一键调试打印工具。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:23:33