mongodb/mongo-go-driver

GitHub: mongodb/mongo-go-driver

MongoDB 官方 Go 语言驱动程序,为 Go 应用提供完整的 MongoDB 数据库连接与操作能力。

Stars: 8538 | Forks: 936

docs docs OpenSSF Scorecard

# MongoDB Go Driver MongoDB 官方支持的 Go driver。 请参阅以下资源,了解有关从 1.x 版本升级到 2.0 版本的更多信息: - [v2.0 迁移指南](docs/migration-2.0.md) - [v2.0 新特性](https://www.mongodb.com/docs/drivers/go/upcoming/whats-new/#what-s-new-in-2.0) MongoDB Go Driver 的发布遵循[语义化版本控制](https://semver.org/)。 ## 要求 ## 安装 开始使用 MongoDB Go Driver 的推荐方法是使用 Go modules 在您的项目中安装依赖。 这可以通过从 `go.mongodb.org/mongo-driver` 导入 package 并在构建步骤中安装依赖来完成, 或者通过显式运行以下命令: ``` go get go.mongodb.org/mongo-driver/v2/mongo ``` ``` dep ensure -add "go.mongodb.org/mongo-driver/v2/mongo" ``` ## 用法 要开始使用该 driver,请导入 `mongo` package 并使用 `Connect` 函数创建一个 `mongo.Client`: ``` import ( "context" "time" "go.mongodb.org/mongo-driver/v2/mongo" "go.mongodb.org/mongo-driver/v2/mongo/options" "go.mongodb.org/mongo-driver/v2/mongo/readpref" ) client, _ := mongo.Connect(options.Client().ApplyURI("mongodb://localhost:27017")) ``` 请确保在实例化 client 后,使用 defer 调用 `Disconnect`: ``` defer func() { if err := client.Disconnect(ctx); err != nil { panic(err) } }() ``` 有关更高级的配置和身份验证,请参阅 [mongo.Connect 的文档](https://pkg.go.dev/go.mongodb.org/mongo-driver/v2/mongo#Connect)。 调用 `Connect` 不会阻塞以进行 server discovery。如果您想知道是否已找到并连接到 MongoDB server,请使用 `Ping` 方法: ``` ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second) defer cancel() _ = client.Ping(ctx, readpref.Primary()) ``` 要向 collection 中插入文档,首先需要从 `Client` 获取一个 `Database`,然后获取 `Collection` 实例: ``` collection := client.Database("testing").Collection("numbers") ``` 然后可以使用 `Collection` 实例来插入文档: ``` ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel() res, _ := collection.InsertOne(ctx, bson.D{{"name", "pi"}, {"value", 3.14159}}) id := res.InsertedID ``` 要使用 `bson.D`,您需要将 `"go.mongodb.org/mongo-driver/v2/bson"` 添加到您的 import 中。 您的 import 语句现在应该如下所示: ``` import ( "context" "log" "time" "go.mongodb.org/mongo-driver/v2/bson" "go.mongodb.org/mongo-driver/v2/mongo" "go.mongodb.org/mongo-driver/v2/mongo/options" "go.mongodb.org/mongo-driver/v2/mongo/readpref" ) ``` 一些查询方法会返回一个 cursor,可以像这样使用: ``` ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) defer cancel() cur, err := collection.Find(ctx, bson.D{}) if err != nil { log.Fatal(err) } defer cur.Close(ctx) for cur.Next(ctx) { var result bson.D if err := cur.Decode(&result); err != nil { log.Fatal(err) } // do something with result.... } if err := cur.Err(); err != nil { log.Fatal(err) } ``` 对于返回单个 item 的方法,会返回一个 `SingleResult` 实例: ``` var result struct { Value float64 } filter := bson.D{{"name", "pi"}} ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel() err := collection.FindOne(ctx, filter).Decode(&result) if errors.Is(err, mongo.ErrNoDocuments) { // Do something when no record was found } else if err != nil { log.Fatal(err) } // Do something with result... ``` 更多示例和文档可以在 examples 目录和 [MongoDB 文档网站](https://www.mongodb.com/docs/drivers/go/current/)上找到。 ### 网络压缩 网络压缩将减少 MongoDB 和应用程序之间的带宽需求。 Go Driver 支持以下压缩算法: 1. [Snappy](https://google.github.io/snappy/) (`snappy`):在 MongoDB 3.4 及更高版本中可用。 2. [Zlib](https://zlib.net/) (`zlib`):在 MongoDB 3.6 及更高版本中可用。 3. [Zstandard](https://github.com/facebook/zstd/) (`zstd`):在 MongoDB 4.2 及更高版本中可用。 #### 指定压缩算法 可以通过连接字符串上的 `compressors` 参数或使用 [`ClientOptions.SetCompressors`](https://pkg.go.dev/go.mongodb.org/mongo-driver/mongo/options#ClientOptions.SetCompressors) 来启用压缩: ``` opts := options.Client().ApplyURI("mongodb://localhost:27017/?compressors=snappy,zlib,zstd") client, _ := mongo.Connect(opts) ``` ``` opts := options.Client().SetCompressors([]string{"snappy", "zlib", "zstd"}) client, _ := mongo.Connect(opts) ``` 如果设置了压缩器,Go Driver 会与 server 协商以选择第一个双方都支持的压缩器。有关 server 配置和默认值,请参阅 [`networkMessageCompressors`](https://www.mongodb.com/docs/manual/reference/program/mongod/#std-option-mongod.--networkMessageCompressors)。 只有当双方都启用了网络压缩时,消息才会被压缩;否则,消息将保持未压缩状态 ## 贡献 ## 持续集成 提交到 master 分支的代码会自动在 [evergreen](https://evergreen.mongodb.com/waterfall/mongo-go-driver) 上运行。 ## 常见问题 请参阅我们的[常见问题](docs/common-issues.md)文档,以排查经常遇到的问题。 ## 致谢 - Go Gopher 插图由 [@ashleymcnamara](https://github.com/ashleymcnamara) 创作 - 原始的 Go Gopher 由 [Renee French](http://reneefrench.blogspot.com/) 设计 ## 许可证 MongoDB Go Driver 采用 [Apache License](LICENSE) 授权。
标签:EVTX分析, 日志审计