Maison >développement back-end >Golang >Comment connecter MongoDB en Go en utilisant Atlas ?

Comment connecter MongoDB en Go en utilisant Atlas ?

WBOY
WBOYavant
2024-02-09 20:36:20657parcourir

Comment connecter MongoDB en Go en utilisant Atlas ?

éditeur php Apple vous présentera comment utiliser Atlas pour vous connecter à MongoDB en langage Go. Atlas est le service d'hébergement cloud officiel de MongoDB, fournissant une solution de base de données distribuée fiable. Grâce à Atlas, vous pouvez facilement vous connecter à MongoDB en langage Go et effectuer des opérations de lecture et d'écriture de données. Ce qui suit vous présentera en détail les étapes spécifiques et la mise en œuvre du code, afin que vous puissiez mieux maîtriser les compétences d'utilisation d'Atlas pour vous connecter à MongoDB dans le langage Go. Apprenons avec l'éditeur !

Contenu de la question

J'ai un problème de délai d'expiration de sélection de serveur lors de la connexion à mongodb. Toute aide serait grandement appréciée.

selection error: server selection timeout, current topology: { type:
replicasetnoprimary, servers: [{ addr:
ac-pjyudwq-shard-00-01.1bnb2bm.mongodb.net:27017, type: unknown, last
error: dial tcp 3.6.207.111:27017: i/o timeout }, { addr:
ac-pjyudwq-shard-00-00.1bnb2bm.mongodb.net:27017, type: unknown, last
error: dial tcp 3.7.150.83:27017: i/o timeout }, { addr:
ac-pjyudwq-shard-00-02.1bnb2bm.mongodb.net:27017, type: unknown, last
error: dial tcp 3.7.137.42:27017: i/o timeout }, ] } exit status 1

Le code que j'ai utilisé pour me connecter

const MONGOURL = "mongodb+srv://sai:[email protected]/?retryWrites=true&w=majority"

var collection *mongo.Collection

func init() {
    fmt.Println("in the init function") var databasename string = "GOAPI"
    var collectionname string = "Movies"
    client, err: = mongo.Connect(context.TODO(), options.Client().ApplyURI(MONGOURL)) if err != nil {
        fmt.Println("unable to get mongo connection ") log.Fatal(err)
    }
    collection = ( * mongo.Collection)(client.Database(databasename).Collection(collectionname)) fmt.Println("sucessfully collection is created ") doc: = Movie {
        Name: "rrr",
        Watched: false,
        Rating: 9,
        Id: "12121"
    }
    result, err: = collection.InsertOne(context.Background(), doc) if err != nil {
        log.Fatal("hey unable to insert one ", err)
    }
    fmt.Println("sucessfully added : ", result.InsertedID)

    // mongo.Connect()`your text`
}

Solution de contournement

J'héberge mon cluster d'atlas de test sur AWS, j'aimerais donc avoir une gestion des informations d'identification similaire à celle du processus AWS. Depuis la page d'informations d'identification AWS :

La chaîne de fournisseurs par défaut recherche les informations d'identification dans l'ordre suivant :

  1. Variables d'environnement.
  2. Partagez le fichier d’informations d’identification.
  3. Si votre application s'exécute sur une instance Amazon EC2, le rôle iam pour Amazon EC2.

Je souhaite donc implémenter un environnement vérifiable pour une connexion simple pour mon exemple d'atlas. Le code ci-dessous suppose que les lignes suivantes ont été émises sur la ligne de commande

export mongo_pw=''

Ensuite, la procédure suivante vérifiera votre connexion

package main

import (
    "context"
    "fmt"
    "os"

    "go.mongodb.org/mongo-driver/mongo"
    "go.mongodb.org/mongo-driver/mongo/options"
)

var username = "<username>"
var host1 = "<atlas host>"  // of the form foo.mongodb.net

func main() {

    ctx := context.TODO()

    pw, ok := os.LookupEnv("MONGO_PW")
    if !ok {
        fmt.Println("error: unable to find MONGO_PW in the environment")
        os.Exit(1)
    }
    mongoURI := fmt.Sprintf("mongodb+srv://%s:%s@%s", username, pw, host1)
    fmt.Println("connection string is:", mongoURI)

    // Set client options and connect
    clientOptions := options.Client().ApplyURI(mongoURI)
    client, err := mongo.Connect(ctx, clientOptions)
    if err != nil {
        fmt.Println(err)
        os.Exit(1)
    }

    err = client.Ping(ctx, nil)
    if err != nil {
        fmt.Println(err)
        os.Exit(1)
    }

    fmt.Println("Connected to MongoDB!")
}

À partir de là, le reste du tutoriel lié à ma question d'origine se déroulera sans problème.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer