本文详解如何使用 go(mgo 驱动)正确地将 json 数组(含嵌套对象)持久化到 mongodb,重点解决结构体字段为空切片、类型不匹配导致数据丢失的常见问题。
在 Go 中操作 MongoDB 时,将动态结构的 JSON 数组(如 API 返回的 collection: [{…}, {…}])插入数据库,常因 Go 的强类型约束和序列化机制处理不当而失败——典型表现为字段存入空数组 [],即使日志显示数据已解析成功。根本原因在于:Go 结构体字段类型与实际 JSON 数据类型不一致,或未正确完成反序列化与类型转换。
✅ 正确做法:使用 []interface{} 适配任意 JSON 对象数组
当外部 API 返回的 collection 字段包含结构不固定、字段数量/类型可能变化的对象数组时,不应强行映射为 []string 或预定义结构体(除非所有对象格式完全统一)。最灵活且可靠的方式是将其声明为 []interface{}:
type MyData struct {
Something string `bson:"something"`
Collection []interface{} `bson:"collection"` // ✅ 关键:支持任意嵌套对象
}
配合标准库 encoding/json 解析后,直接赋值即可: