哈哈,去吧,特别好看
- 2019-11-17
本篇文章主要是针对Golang MongoDB客户端的一个使用教程,客户端使用的MongoDB官方Golang扩展包。
开始之前,你可以在这里找到本文的所有代码示例:mongo-go-example
在运行示例代码之前,请确保你的电脑安装了docker,本文的MongoDB运行环境基于docker,如果安装了docker,在项目根目录执行docker-compose up -d
即可运行MongoDB,如果没有安装docker,也可以申请MongoDB官方的免费版本云服务,教程在这里:免费试用MongoDB
在GoPath以外的目录新建一个目录,然后执行以下命令:
go mod init mongoproject go get go.mongodb.org/mongo-driver
package main
import (
"context"
"fmt"
"log"
"time"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
"go.mongodb.org/mongo-driver/mongo/readpref"
)
func main() {
clientOpts := options.Client().ApplyURI("mongodb://test:test@127.0.0.1:27017")
client, err := mongo.Connect(context.TODO(), clientOpts)
if err != nil {
log.Fatal(err)
}
_ = client
}
注意:上面的代码并不会真正的连接MongoDB,只是初始化了一个client,如果要检查MongoDB是否真正的连接上,必须要加上Ping方法。
完善后代码如下:
func getClient() *mongo.Client {
clientOption := options.Client()
clientOption.ApplyURI("mongodb://test:test@127.0.0.1:27017")
client, err := mongo.NewClient(clientOption)
if err != nil {
log.Fatal(err)
}
ctx, _ := context.WithTimeout(context.Background(), 10*time.Second)
err = client.Connect(ctx)
if err != nil {
log.Fatal(err)
}
err = client.Ping(ctx, readpref.Primary())
if err != nil {
log.Fatal(err)
}
return client
}
上面的代码就能正确的连接MongoDB,当然这只是连接MongoDB的方式之一,其他连接方式请参考:Connect
接下来我们来验证下是否连接成功:
func main() {
ctx := context.Background()
client := getClient()
defer client.Disconnect(ctx)
res, err := client.ListDatabases(ctx, bson.M{})
if err != nil {
log.Fatalln()
}
for _, database := range res.Databases {
log.Println(database.Name)
}
}
控制台执行go run main.go
成功打印出了MongoDB自带的三个数据库。
除此之外,还有一些地方需要注意:
1.上面的clientOption有一系列设置MongoDB客户端设置的方法,虽然默认的设置在开发环境够用了,但是到生产环境还是要根据自己的业务来调整配置,让客户端的性能更好,我简单列几个方法:
上面只是我简单了列了几个方法示例,更多方法设置请参考这里:ClientOptions,你可以根据自己的业务来设置。
例如下面这样:
clientOption := options.Client()
clientOption.ApplyURI("mongodb://test:test@127.0.0.1:27017")
clientOption.SetConnectTimeout(time.Second * 10)
clientOption.SetServerSelectionTimeout(time.Second * 60)
clientOption.SetSocketTimeout(time.Second * 30)
clientOption.SetMaxPoolSize(10)
clientOption.SetMinPoolSize(1)
clientOption.SetMaxConnIdleTime(time.Second * 30)
//clientOption.SetReplicaSet("rs0")
client, err := mongo.NewClient(clientOption)
if err != nil {
log.Fatal(err)
}
ctx, _ := context.WithTimeout(context.Background(), 10*time.Second)
err = client.Connect(ctx)
if err != nil {
log.Fatal(err)
}
err = client.Ping(ctx, readpref.Primary())
if err != nil {
log.Fatal(err)
}
ok,这篇文章就到这里,下篇文章讲解MongoDB的增删改查操作。
转载请注明出处,谢谢。
评论一下