Skip to content
Merged
Show file tree
Hide file tree
Changes from 18 commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
8d1c1ae
WRITING-26459 Add v2 migration guide to docs
prestonvasquez Aug 22, 2024
6490707
WRITING-26459 Fix indentation
prestonvasquez Aug 22, 2024
36761c2
WRITING-26459 Update report card link
prestonvasquez Aug 22, 2024
abab476
WRITING-26568 Add v2 BSON migration guide to docs
qingyang-hu Aug 23, 2024
cf13f23
Update docs/migration-2.0.md
prestonvasquez Aug 23, 2024
955d1b0
Update docs/migration-2.0.md
prestonvasquez Aug 23, 2024
f6db5cd
WRITING-26459 Finish code block
prestonvasquez Aug 23, 2024
28a27c9
WRITING-26459 Finish code block
prestonvasquez Aug 23, 2024
ada1163
Update docs/migration-2.0.md
prestonvasquez Aug 23, 2024
a95e576
Update docs/migration-2.0.md
qingyang-hu Aug 23, 2024
60af8e3
Update v2 migration guide BSON portion
qingyang-hu Aug 23, 2024
9c79933
Update docs/migration-2.0.md
prestonvasquez Aug 23, 2024
500270d
Update docs/migration-2.0.md
prestonvasquez Aug 23, 2024
eb681bb
Update docs/migration-2.0.md
prestonvasquez Aug 23, 2024
b175387
Update docs/migration-2.0.md
prestonvasquez Aug 23, 2024
becf0e5
Update docs/migration-2.0.md
prestonvasquez Aug 23, 2024
54afb21
Update docs/migration-2.0.md
prestonvasquez Aug 26, 2024
8ea4956
WRITING-26459 Use BSON documentation nomenclature when referencing types
prestonvasquez Aug 27, 2024
9745398
WRITING-25459 Add punctuation back to guide
prestonvasquez Aug 27, 2024
400c152
WRITING-25459 Update true to use code-form
prestonvasquez Aug 27, 2024
13303ce
Update README.md
prestonvasquez Aug 28, 2024
fb1e235
Update docs/migration-2.0.md
prestonvasquez Aug 28, 2024
2307561
Update docs/migration-2.0.md
prestonvasquez Aug 28, 2024
ec89bef
Update docs/migration-2.0.md
prestonvasquez Aug 28, 2024
ec0fde5
Update docs/migration-2.0.md
prestonvasquez Aug 28, 2024
625e4be
Update docs/migration-2.0.md
prestonvasquez Aug 28, 2024
78b3b26
Merge branch 'master' into WRITING-26459
prestonvasquez Aug 28, 2024
4eea8a1
Merge branch 'master' into WRITING-26459
prestonvasquez Sep 4, 2024
a3b56e6
Merge branch 'master' into WRITING-26459
prestonvasquez Sep 4, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
75 changes: 34 additions & 41 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,43 +1,39 @@
<p align="center"><img src="etc/assets/mongo-gopher.png" width="250"></p>
<p align="center">
<a href="https://goreportcard.com/report/go.mongodb.org/mongo-driver"><img src="https://goreportcard.com/badge/go.mongodb.org/mongo-driver"></a>
<a href="https://pkg.go.dev/go.mongodb.org/mongo-driver/mongo"><img src="etc/assets/godev-mongo-blue.svg" alt="docs"></a>
<a href="https://pkg.go.dev/go.mongodb.org/mongo-driver/bson"><img src="etc/assets/godev-bson-blue.svg" alt="docs"></a>
<a href="https://goreportcard.com/report/go.mongodb.org/mongo-driver/v2"><img src="https://goreportcard.com/badge/go.mongodb.org/mongo-driver/v2"></a>
<a href="https://pkg.go.dev/go.mongodb.org/mongo-driver/v2/mongo"><img src="etc/assets/godev-mongo-blue.svg" alt="docs"></a>
<a href="https://pkg.go.dev/go.mongodb.org/mongo-driver/v2/bson"><img src="etc/assets/godev-bson-blue.svg" alt="docs"></a>
<a href="https://www.mongodb.com/docs/drivers/go/current/"><img src="etc/assets/docs-mongodb-green.svg"></a>
</p>

# MongoDB Go Driver

The MongoDB supported driver for Go.

______________________________________________________________________
See [here](docs/migration-2.0.md) for the migration guide for upgrading from version 1.x to 2.0.

## Requirements

- Go 1.18 or higher. We aim to support the latest versions of Go.
- Go 1.22 or higher is required to run the driver test suite.
- MongoDB 3.6 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

```bash
go get go.mongodb.org/mongo-driver/mongo
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

```bash
dep ensure -add "go.mongodb.org/mongo-driver/mongo"
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:
Expand All @@ -47,14 +43,12 @@ import (
"context"
"time"

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

ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()
client, err := mongo.Connect(options.Client().ApplyURI("mongodb://localhost:27017"))
client, _ := mongo.Connect(options.Client().ApplyURI("mongodb://localhost:27017"))
```

Make sure to defer a call to `Disconnect` after instantiating your client:
Expand All @@ -67,15 +61,16 @@ defer func() {
}()
```

For more advanced configuration and authentication, see the [documentation for mongo.Connect](https://pkg.go.dev/go.mongodb.org/mongo-driver/mongo#Connect).
For more advanced configuration and authentication, see the [documentation for mongo.Connect](https://pkg.go.dev/go.mongodb.org/mongo-driver/v2/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:

```go
ctx, cancel = context.WithTimeout(context.Background(), 2*time.Second)
defer cancel()
err = client.Ping(ctx, readpref.Primary())

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

To insert a document into a collection, first retrieve a `Database` and then `Collection` instance from the `Client`:
Expand All @@ -89,11 +84,12 @@ The `Collection` instance can then be used to insert documents:
```go
ctx, cancel = context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
res, err := collection.InsertOne(ctx, bson.D{{"name", "pi"}, {"value", 3.14159}})

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/bson"` to your imports.
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:

Expand All @@ -103,10 +99,10 @@ import (
"log"
"time"

"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
"go.mongodb.org/mongo-driver/mongo/readpref"
"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"
)
```

Expand All @@ -115,15 +111,22 @@ Several query methods return a cursor, which can be used like this:
```go
ctx, cancel = context.WithTimeout(context.Background(), 30*time.Second)
defer cancel()

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

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

// do something with result....
}

if err := cur.Err(); err != nil {
log.Fatal(err)
}
Expand All @@ -135,16 +138,18 @@ 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 err == mongo.ErrNoDocuments {
if errors.Is(err, mongo.ErrNoDocuments) {
// Do something when no record was found
fmt.Println("record does not exist")
} else if err != nil {
log.Fatal(err)
}

// Do something with result...
```

Expand Down Expand Up @@ -178,41 +183,29 @@ If compressors are set, the Go Driver negotiates with the server to select the f

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

______________________________________________________________________

## Feedback

For help with the driver, please post in the [MongoDB Community Forums](https://developer.mongodb.com/community/forums/tag/golang/).

New features and bugs can be reported on jira: https://jira.mongodb.org/browse/GODRIVER

______________________________________________________________________

## Contribution

Check out the [project page](https://jira.mongodb.org/browse/GODRIVER) for tickets that need completing. See our [contribution guidelines](docs/CONTRIBUTING.md) for details.

______________________________________________________________________

## Continuous Integration

Commits to master are run automatically on [evergreen](https://evergreen.mongodb.com/waterfall/mongo-go-driver).

______________________________________________________________________

## Frequently Encountered Issues

See our [common issues](docs/common-issues.md) documentation for troubleshooting frequently encountered issues.

______________________________________________________________________

## Thanks and Acknowledgement

- The Go Gopher artwork by [@ashleymcnamara](https://github.com/ashleymcnamara)
- The original Go Gopher was designed by [Renee French](http://reneefrench.blogspot.com/)

______________________________________________________________________

## License

The MongoDB Go Driver is licensed under the [Apache License](LICENSE).
Loading