Docs Menu
Docs Home
/ / /
Go Driver
/ /

Connection Guide

On this page

  • Overview
  • Connection URI
  • Other Ways to Connect to MongoDB

In this guide, you can learn how to connect to a MongoDB instance or replica set deployment by using the Go driver.

You can use the Go driver to connect to deployments hosted in the following environments:

  • MongoDB Atlas: the fully managed service for MongoDB deployments in the cloud

  • MongoDB Enterprise: the subscription-based, self-managed version of MongoDB

  • MongoDB Community: the source-available, free-to-use, and self-managed version of MongoDB

A connection URI, also known as a connection string, tells the driver how to connect to MongoDB and how to behave while connected.

The following example explains each part of a sample connection URI:

Each part of the connection string

In this example, we use mongodb for the protocol, which specifies the Standard Connection String Format. You can also use the DNS Seed List Connection Format if you want more flexibility of deployment and the ability to change the servers in rotation without reconfiguring clients.

The next part of the connection string contains your database username and, if you are using password-based authentication, your password. Replace the value of user with your database username and pass with your password. If you are using an authentication mechanism that does not require a username and password, omit this part of the connection URI.

The next part of the connection string specifies the hostname or IP address and port of your MongoDB instance. In the preceding example, we use sample.host as the hostname and 27017 as the port. Replace these values to point to your MongoDB instance.

The last part of the connection string specifies connection and authentication options. In the example, we set two connection options: maxPoolSize=20 and w=majority. To learn more about connection options, see the Connection Options guide.

To connect to MongoDB, you must create a client. A client manages your connections and runs database commands.

Tip

Reuse Your Client

We recommend that you reuse your client across sessions and operations. You can use the same Client instance to perform multiple tasks, instead of creating a new one each time. The Client type is safe for concurrent use by multiple goroutines. To learn more about how connection pools work in the driver, see the FAQ page.

You can create a client that uses your connection string and other client options by passing a ClientOptions object to the Connect() method.

To specify your connection URI, pass it to the ApplyURI() method, which returns a new ClientOptions instance. To set any other options, call the relevant helper method from the options package.

To learn more about connection options, see the Connection Options section. To learn more about creating a client, see the API documentation for Client and Connect().

You can set the Stable API version as an option to avoid breaking changes when you upgrade to a new server version. To learn more about the Stable API feature, see the Stable API page.

The following code shows how you can create a client that uses an Atlas connection string and the Stable API version, connect to MongoDB, and verify that the connection is successful:

// Connects to MongoDB and sets a Stable API version
package main
import (
"context"
"fmt"
"log"
"os"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
)
func main() {
var uri string
if uri = os.Getenv("MONGODB_URI"); uri == "" {
log.Fatal("You must set your 'MONGODB_URI' environment variable. See\n\t https://docs.mongodb.com/drivers/go/current/usage-examples/")
}
// Use the SetServerAPIOptions() method to set the Stable API version to 1
serverAPI := options.ServerAPI(options.ServerAPIVersion1)
opts := options.Client().ApplyURI(uri).SetServerAPIOptions(serverAPI)
// Create a new client and connect to the server
client, err := mongo.Connect(opts)
if err != nil {
panic(err)
}
defer func() {
if err = client.Disconnect(context.TODO()); err != nil {
panic(err)
}
}()
// Send a ping to confirm a successful connection
var result bson.M
if err := client.Database("admin").RunCommand(context.TODO(), bson.D{{"ping", 1}}).Decode(&result); err != nil {
panic(err)
}
fmt.Println("Pinged your deployment. You successfully connected to MongoDB!")
}

Tip

Follow the Quick Start guide to retrieve your Atlas connection string.

Note

To learn about connecting to Atlas Serverless, see the Serverless Instance Limitations page to identify the minimum driver version required.

If you are connecting to a single MongoDB server instance or replica set that is not hosted on Atlas, see the following sections to find out how to connect.

If you must run a MongoDB server on your local machine for development purposes, complete the following steps:

  1. Download the Community or Enterprise version of MongoDB Server.

  2. Install and configure MongoDB Server.

  3. Start the server.

Important

Always secure your MongoDB server from malicious attacks. See our Security Checklist for a list of security recommendations.

After you successfully start your MongoDB server, specify your connection string in your driver connection code.

If your MongoDB Server is running locally, you can use the connection string "mongodb://localhost:<port>" where <port> is the port number you configured your server to listen for incoming connections.

If you want to specify a different hostname or IP address, see our Server Manual entry on Connection Strings.

To test whether you can connect to your server, replace the connection string with your localhost connection string in the preceding code example.

A MongoDB replica set deployment is a group of connected instances that store the same set of data. This configuration provides data redundancy and high data availability.

To connect to a replica set deployment, specify the hostname and port numbers of each instance, separated by commas, and the replica set name as the value of the replicaSet parameter in the connection string. In the following example, the hostnames are host1, host2, and host3, and the port numbers are all 27017. The replica set name is myRS.

mongodb://host1:27017,host2:27017,host3:27017/?replicaSet=myRS

When connecting to a replica set, the driver takes the following actions by default:

  • Discovers all replica set members when given the address of any one member.

  • Dispatches operations to the appropriate member, such as instructions to write against the primary.

Tip

You can specify just one host to connect to a replica set. However, to ensure connectivity when the specified host is unavailable, you should provide the full list of hosts.

To force operations on the host designated in the connection URI, specify the directConnection option. Direct connections exhibit the following behavior:

  • They don't support SRV strings.

  • They fail on writes when the specified host is not the primary.

  • They require you to specify a secondary read preference when the specified host isn't the primary node.

Back

Connections