MCPcopy Index your code
hub / github.com/mongodb/mongo-go-driver

github.com/mongodb/mongo-go-driver @v2.7.0 sqlite

repository ↗ · DeepWiki ↗ · release v2.7.0 ↗
7,230 symbols 41,022 edges 594 files 4,074 documented · 56% 1 cross-repo links
README

docs docs OpenSSF Scorecard

MongoDB Go Driver

The MongoDB supported driver for Go.

See the following resources to learn more about upgrading from version 1.x to 2.0.:

The MongoDB Go Driver follows semantic versioning for its releases.

Requirements

  • Go 1.19 or higher. We aim to support the latest versions of Go.
  • Go 1.25 or higher is required to run the driver test suite.
  • MongoDB 4.2 and higher.

Installation

The recommended way to get started using the MongoDB Go Driver is by using Go modules to install the dependency in your project. This can be done either by importing packages from go.mongodb.org/mongo-driver and having the build step install the dependency or by explicitly running

go get go.mongodb.org/mongo-driver/v2/mongo

When using a version of Go that does not support modules, the driver can be installed using dep by running

dep ensure -add "go.mongodb.org/mongo-driver/v2/mongo"

Usage

To get started with the driver, import the mongo package and create a mongo.Client with the Connect function:

import (
    "context"
    "time"

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

client, _ := mongo.Connect(options.Client().ApplyURI("mongodb://localhost:27017"))

Make sure to defer a call to Disconnect after instantiating your client:

defer func() {
    if err := client.Disconnect(ctx); err != nil {
        panic(err)
    }
}()

For more advanced configuration and authentication, see the documentation for mongo.Connect.

Calling Connect does not block for server discovery. If you wish to know if a MongoDB server has been found and connected to, use the Ping method:

ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second)
defer cancel()

_ = client.Ping(ctx, readpref.Primary())

To insert a document into a collection, first retrieve a Database and then Collection instance from the Client:

collection := client.Database("testing").Collection("numbers")

The Collection instance can then be used to insert documents:

ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()

res, _ := collection.InsertOne(ctx, bson.D{{"name", "pi"}, {"value", 3.14159}})
id := res.InsertedID

To use bson.D, you will need to add "go.mongodb.org/mongo-driver/v2/bson" to your imports.

Your import statement should now look like this:

import (
    "context"
    "log"
    "time"

    "go.mongodb.org/mongo-driver/v2/bson"
    "go.mongodb.org/mongo-driver/v2/mongo"
    "go.mongodb.org/mongo-driver/v2/mongo/options"
    "go.mongodb.org/mongo-driver/v2/mongo/readpref"
)

Several query methods return a cursor, which can be used like this:

ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
defer cancel()

cur, err := collection.Find(ctx, bson.D{})
if err != nil {
  log.Fatal(err)
}

defer cur.Close(ctx)
for cur.Next(ctx) {
    var result bson.D
    if err := cur.Decode(&result); err != nil {
      log.Fatal(err)
    }

    // do something with result....
}

if err := cur.Err(); err != nil {
    log.Fatal(err)
}

For methods that return a single item, a SingleResult instance is returned:

var result struct {
    Value float64
}

filter := bson.D{{"name", "pi"}}
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()

err := collection.FindOne(ctx, filter).Decode(&result)
if errors.Is(err, mongo.ErrNoDocuments) {
    // Do something when no record was found
} else if err != nil {
    log.Fatal(err)
}

// Do something with result...

Additional examples and documentation can be found under the examples directory and on the MongoDB Documentation website.

Network Compression

Network compression will reduce bandwidth requirements between MongoDB and the application.

The Go Driver supports the following compression algorithms:

  1. Snappy (snappy): available in MongoDB 3.4 and later.
  2. Zlib (zlib): available in MongoDB 3.6 and later.
  3. Zstandard (zstd): available in MongoDB 4.2 and later.

Specify Compression Algorithms

Compression can be enabled using the compressors parameter on the connection string or by using ClientOptions.SetCompressors:

opts := options.Client().ApplyURI("mongodb://localhost:27017/?compressors=snappy,zlib,zstd")
client, _ := mongo.Connect(opts)
opts := options.Client().SetCompressors([]string{"snappy", "zlib", "zstd"})
client, _ := mongo.Connect(opts)

If compressors are set, the Go Driver negotiates with the server to select the first common compressor. For server configuration and defaults, refer to networkMessageCompressors.

Messages compress when both parties enable network compression; otherwise, messages remain uncompressed

Support / Feedback

For issues with, questions about, or feedback for the Go Driver, please look into our support channels, including StackOverflow.

New features and bugs can be reported on the GODRIVER Jira project.

Contribution

Check out the GODRIVER Jira project for tickets that need completing. See our contribution guidelines for details.

Continuous Integration

Commits to master are run automatically on evergreen.

Frequently Encountered Issues

See our common issues documentation for troubleshooting frequently encountered issues.

Thanks and Acknowledgement

License

The MongoDB Go Driver is licensed under the Apache License.

Extension points exported contracts — how you extend this code

WriteModel (Interface)
WriteModel is an interface implemented by models that can be used in a BulkWrite operation. Each WriteModel represents a [6 …
mongo/bulk_write_models.go
Dialer (Interface)
Dialer is used to make network connections. [7 implementers]
mongo/mongo.go
ClientWriteModel (Interface)
ClientWriteModel is an interface implemented by models that can be used in a client-level BulkWrite operation. Each Clie [6 …
mongo/client_bulk_write_models.go
LabeledError (Interface)
LabeledError is an interface for errors with labels. [7 implementers]
mongo/errors.go
LogSink (Interface)
LogSink is an interface that can be implemented to provide a custom sink for the driver's logs. [6 implementers]
mongo/options/loggeroptions.go
Authenticator (Interface)
Authenticator handles authenticating a connection. The implementers of this interface are all in the auth package. Most [9 …
x/mongo/driver/driver.go
LogSink (Interface)
LogSink represents a logging implementation, this interface should be 1-1 with the exported "LogSink" interface in the m [6 …
internal/logger/logger.go
Provider (Interface)
A Provider is the interface for any component which will provide credentials Value. A provider is required to manage its [10 …
internal/aws/credentials/credentials.go

Core symbols most depended-on inside this repo

Errorf
called by 1992
internal/require/require.go
Run
called by 1474
internal/integration/mtest/mongotest.go
Equal
called by 1032
internal/assert/assertions.go
Nil
called by 945
internal/assert/assertions.go
NoError
called by 883
internal/require/require.go
True
called by 467
internal/assert/assertions.go
Helper
called by 365
internal/require/require.go
Client
called by 349
mongo/options/clientoptions.go

Shape

Method 3,202
Function 2,809
Struct 931
TypeAlias 156
Interface 100
FuncType 32

Languages

Go100%

Modules by API surface

bson/mgoregistry_test.go123 symbols
x/bsonx/bsoncore/bsoncore.go93 symbols
mongo/errors.go88 symbols
mongo/options/findoptions.go76 symbols
x/mongo/driver/operation.go66 symbols
x/mongo/driver/topology/connection.go65 symbols
mongo/options/clientoptions.go63 symbols
internal/require/require.go63 symbols
x/mongo/driver/wiremessage/wiremessage.go62 symbols
bson/value_reader.go60 symbols
x/bsonx/bsoncore/value.go59 symbols
internal/assert/assertions_test.go58 symbols

Used by 1 indexed graphs manifest dependencies, hub-wide

Dependencies from manifests, versioned

dario.cat/mergov1.0.0 · 1×
github.com/AdaLogics/go-fuzz-headersv0.0.0-2023081113042 · 1×
github.com/Azure/go-ansitermv0.0.0-2021061722524 · 1×
github.com/Microsoft/go-winiov0.6.2 · 1×
github.com/bombsimon/logrusr/v4v4.1.0 · 1×
github.com/cespare/xxhash/v2v2.3.0 · 1×
github.com/containerd/logv0.1.0 · 1×
github.com/containerd/platformsv0.2.1 · 1×
github.com/cpuguy83/dockercfgv0.3.2 · 1×

Datastores touched

collCollection · 1 repos
barCollection · 1 repos
datakeysCollection · 1 repos
air_alliancesCollection · 1 repos
airlinesCollection · 1 repos
catsCollection · 1 repos
dogsCollection · 1 repos
employeesCollection · 1 repos

For agents

$ claude mcp add mongo-go-driver \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact