Golang使用MongoDB报告“超出上下文截止日期”

时间:2019-07-02 09:14:59

标签: mongodb go

我编写了一个更新函数,但是多次执行将产生错误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

4 个答案:

答案 0 :(得分:0)

更改 mongodb://localhost:27017 mongodb://127.0.0.1:27017/

答案 1 :(得分:0)

您使用哪个mongodb版本 Go mongo驱动程序不支持Mongo 2.4 https://jira.mongodb.org/browse/GODRIVER-1571

答案 2 :(得分:0)

在 GoLand 中调试时有时会发生这种情况,如果您有一个断点并且程序等待,然后您继续并收到此错误。如果您删除断点并再次运行该程序,它会起作用。至少我的情况是这样。

答案 3 :(得分:-1)

您的URI错误,因为您正在使用docker。

如果您的mongoDB容器名为mongoContainer, 您应该:

client, _ := mongo.NewClient(options.Client().ApplyURI("mongodb://mongoContainer"))