Как использовать новый URL из mongodb 3.6 для подключения с golang - PullRequest
0 голосов
/ 28 августа 2018

Я попытался подключиться к mongodb Atlas с помощью драйверов golang.

tlsConfig := &tls.Config{}

var mongoURI = "mongodb+srv://admin:password@prefix.mongodb.net:27017/dbname"
dialInfo, err := mgo.ParseURL(mongoURI)
if err != nil {
    panic(err)
}
dialInfo.DialServer = func(addr *mgo.ServerAddr) (net.Conn, error) {
    conn, err := tls.Dial("tcp", addr.String(), tlsConfig)
    return conn, err
}

session, err := mgo.DialWithInfo(dialInfo)
if err != nil {
    println("error")
    log.Fatal(err)
}
_ = session
c := session.DB("Token").C("_Users")
user := &User{firstName: "username"}
err = c.Insert(user)
if err != nil {
    println("error Again")
}

Я не получаю сообщение об ошибке при подключении. Мне интересно, в чем может быть причина. Любая помощь приветствуется.

Я пытался создать DialInfo, используя приведенный ниже код

    dialInfo := &mgo.DialInfo{
    Addrs:     []string{"prefix.mongodb.net:27017"},
    Database:  "dbname",
    Mechanism: "SCRAM",
    Timeout:   10 * time.Second,
    Username:  "admin",
    Password:  "passwrd",
}

Теперь у меня нет доступных серверов

1 Ответ

0 голосов
/ 29 августа 2018

Я мог видеть только то, что код запустился, тогда ничего

Как вы уже поняли, это потому, что DialInfo по умолчанию имеет нулевое время ожидания. Вызов будет заблокирован навсегда в ожидании установления соединения. Вы также можете указать время ожидания:

dialInfo.Timeout = time.Duration(30)
session, err := mgo.DialWithInfo(dialInfo)

Теперь у меня нет доступных серверов

Это потому, что globalsign / mgo в настоящее время еще не поддерживает SRV строку подключения URI . См. выпуски 112 . Вы можете использовать формат URI не-srv-соединения (MongoDB v3.4), см. Связанный вопрос StackOverflow: 41173720 .

Вместо этого вы можете использовать mongo-go-driver , если вы хотите подключиться с использованием URI-соединения SRV, например:

mongoURI := "mongodb+srv://admin:password@prefix.mongodb.net/dbname?ssl=true&retryWrites=true"

client, err := mongo.NewClient(options.Client().ApplyURI(mongoURI))
if err != nil {
    log.Fatal(err)
}
ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second)
defer cancel()
err = client.Connect(ctx)
defer client.Disconnect(ctx)

if err != nil {
    log.Fatal(err)
}
database := client.Database("go")
collection := database.Collection("atlas")

Приведенный выше пример совместим с текущей версией v1.0.0

...