必须用 go.mongodb.org/mongo-driver/mongomongo.Connect 需 context.WithTimeout插入前验证 client.PingURI 密码需 URL 编码结构体字段首字母大写并加 bson tagFind 后须 cursor.Close 且 Decode 用指针所有操作必传 context。MongoDB 官方驱动已弃用 mgo必须用 go.mongodb.org/mongo-driver/mongo —— 2026 年还在用 mgo 会直接连不上新版 MongoDB≥ 5.0且无法支持 TLS 1.3、SCRAM-SHA-256 认证等现代安全机制。怎么连上数据库mongo.Connect 必须配 context 和超时不设超时的 mongo.Connect 在网络卡顿或 DNS 失败时会永久阻塞Go 协程卡死不传 context 则无法被取消服务重启时可能残留连接。context.WithTimeout(context.Background(), 10*time.Second) 是安全底线别用 context.TODO() 或裸 context.Background()连接后务必调用 client.Ping(ctx, nil) 主动验证否则首次查询失败才暴露问题URI 中密码含特殊字符如 、/必须 URL 编码否则 ApplyURI 解析失败且报错极隐晦invalid URI插入数据为什么没生成 _id结构体字段必须首字母大写 bson tagGo 结构体字段小写如 name string是包私有mongo-driver 序列化时直接跳过导致插入空文档或丢失字段_id 不自动生成是因为驱动根本没看到你定义的 Id 字段。字段名首字母必须大写Name string不是 name string显式声明 _id 字段并绑定Id primitive.ObjectID bson:_id,omitempty需 import go.mongodb.org/mongo-driver/bson/primitive不手动设 _id 时用 primitive.NewObjectID() 赋值或让驱动自动生成插入后从 InsertOneResult.InsertedID 取Find 返回空切片但没报错检查 cursor.Close 和 Decode 顺序collection.Find 返回的是 *mongo.Cursor它不立即拉取数据若忘记 defer cursor.Close(ctx)连接池会被耗尽若用 cursor.All 但没检查返回 error空结果可能掩盖了权限不足或索引缺失等真实问题。 Mokker AI AI产品图添加背景