【发布时间】:2019-07-02 09:14:59
【问题描述】:
我写了一个更新函数,但是多次执行会报错context deadline exceeded。
我的功能:
func Update(link string, m bson.M) {
configInfo := config.Config()
// client := GetInstance().client
// ctx := GetInstance().ctx
client, _ := mongo.NewClient(options.Client().ApplyURI("mongodb://localhost:27017"))
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
err := client.Connect(ctx)
if err != nil {
fmt.Print("connect error!")
fmt.Println(err)
}
db := client.Database("test")
lianjia := db.Collection("test")
_, err = lianjia.UpdateOne(ctx, bson.M{"Link": link}, bson.M{"$set": m})
if err != nil {
fmt.Print("update error!")
fmt.Println(err)
}
}
输出:
update error!context deadline exceeded
【问题讨论】:
-
首先:检查所有您的错误 (
mongo.NewClient())。下一个:mongo.Connect()不会阻止服务器发现。即使您无法连接,它也可能无错误地返回。使用Client.Ping()验证客户端可以连接到拓扑。 -
@icza Client.ping() 输出“客户端断开连接”,为什么断开连接?
-
您可能根本无法连接。可能有几个原因,例如错误的 URI,没有运行 MongoDB 服务器等...
-
@icza 但是我已经更新了一些数据。我通过docker用官方镜像构建了MongoDB。
-
你用的是哪个mongodb版本 Go mongo驱动不支持Mongo 2.4 jira.mongodb.org/browse/GODRIVER-1571