• Home
  • History
  • Annotate
Name Date Size #Lines LOC

..03-May-2022-

.evergreen/H06-Jun-2019-

benchmark/H06-Jun-2019-

bson/H06-Jun-2019-

cmd/H06-Jun-2019-

data/H06-Jun-2019-

etc/H06-Jun-2019-

event/H06-Jun-2019-

examples/documentation_examples/H06-Jun-2019-

internal/H06-Jun-2019-

mongo/H06-Jun-2019-

tag/H06-Jun-2019-

vendor/H06-Jun-2019-

version/H06-Jun-2019-

x/H06-Jun-2019-

.errcheck-excludesH A D06-Jun-2019598

.gitignoreH A D06-Jun-2019111

.gitmodulesH A D06-Jun-2019101

.lint-whitelistH A D06-Jun-20197.3 KiB

CONTRIBUTING.mdH A D06-Jun-20192.3 KiB

Gopkg.lockH A D06-Jun-20194.5 KiB

Gopkg.tomlH A D06-Jun-20191.1 KiB

LICENSEH A D06-Jun-201911.1 KiB

MakefileH A D06-Jun-20193.7 KiB

README.mdH A D06-Jun-20197.2 KiB

THIRD-PARTY-NOTICESH A D06-Jun-201922 KiB

README.md

1<p align="center"><img src="etc/assets/mongo-gopher.png" width="250"></p>
2<p align="center">
3  <a href="https://goreportcard.com/report/go.mongodb.org/mongo-driver"><img src="https://goreportcard.com/badge/go.mongodb.org/mongo-driver"></a>
4  <a href="https://godoc.org/go.mongodb.org/mongo-driver/mongo"><img src="etc/assets/godoc-mongo-blue.svg" alt="GoDoc"></a>
5  <a href="https://godoc.org/go.mongodb.org/mongo-driver/bson"><img src="etc/assets/godoc-bson-blue.svg" alt="GoDoc"></a>
6  <a href="https://docs.mongodb.com/ecosystem/drivers/go/"><img src="etc/assets/docs-mongodb-green.svg"></a>
7</p>
8
9# MongoDB Go Driver
10
11The MongoDB supported driver for Go.
12
13-------------------------
14- [Requirements](#requirements)
15- [Installation](#installation)
16- [Usage](#usage)
17- [Bugs/Feature Reporting](#bugs-feature-reporting)
18- [Testing / Development](#testing--development)
19- [Continuous Integration](#continuous-integration)
20- [License](#license)
21
22-------------------------
23## Requirements
24
25- Go 1.10 or higher. We aim to support the latest supported versions of go.
26- MongoDB 2.6 and higher.
27
28-------------------------
29## Installation
30
31The recommended way to get started using the MongoDB Go driver is by using `dep` to install the dependency in your project.
32
33```bash
34dep ensure -add "go.mongodb.org/mongo-driver/mongo@~1.0.3"
35```
36
37-------------------------
38## Usage
39
40To get started with the driver, import the `mongo` package, create a `mongo.Client`:
41
42```go
43import "go.mongodb.org/mongo-driver/mongo"
44
45client, err := mongo.NewClient(options.Client().ApplyURI("mongodb://localhost:27017"))
46```
47
48And connect it to your running MongoDB server:
49
50```go
51ctx, _ := context.WithTimeout(context.Background(), 10*time.Second)
52err = client.Connect(ctx)
53```
54
55To do this in a single step, you can use the `Connect` function:
56
57```go
58ctx, _ := context.WithTimeout(context.Background(), 10*time.Second)
59client, err := mongo.Connect(ctx, options.Client().ApplyURI("mongodb://localhost:27017"))
60```
61
62Calling `Connect` does not block for server discovery. If you wish to know if a MongoDB server has been found and connected to,
63use the `Ping` method:
64
65```go
66ctx, _ = context.WithTimeout(context.Background(), 2*time.Second)
67err = client.Ping(ctx, readpref.Primary())
68```
69
70To insert a document into a collection, first retrieve a `Database` and then `Collection` instance from the `Client`:
71
72```go
73collection := client.Database("testing").Collection("numbers")
74```
75
76The `Collection` instance can then be used to insert documents:
77
78```go
79ctx, _ = context.WithTimeout(context.Background(), 5*time.Second)
80res, err := collection.InsertOne(ctx, bson.M{"name": "pi", "value": 3.14159})
81id := res.InsertedID
82```
83
84Several query methods return a cursor, which can be used like this:
85
86```go
87ctx, _ = context.WithTimeout(context.Background(), 30*time.Second)
88cur, err := collection.Find(ctx, bson.D{})
89if err != nil { log.Fatal(err) }
90defer cur.Close(ctx)
91for cur.Next(ctx) {
92   var result bson.M
93   err := cur.Decode(&result)
94   if err != nil { log.Fatal(err) }
95   // do something with result....
96}
97if err := cur.Err(); err != nil {
98  log.Fatal(err)
99}
100```
101
102For methods that return a single item, a `SingleResult` instance is returned:
103
104```go
105var result struct {
106    Value float64
107}
108filter := bson.M{"name": "pi"}
109ctx, _ = context.WithTimeout(context.Background(), 5*time.Second)
110err = collection.FindOne(ctx, filter).Decode(&result)
111if err != nil {
112    log.Fatal(err)
113}
114// Do something with result...
115```
116
117Additional examples and documentation can be found under the examples directory and [on the MongoDB Documentation website](https://docs.mongodb.com/ecosystem/drivers/go/).
118
119-------------------------
120## Bugs / Feature Reporting
121
122New Features and bugs can be reported on jira: https://jira.mongodb.org/browse/GODRIVER
123
124-------------------------
125## Testing / Development
126
127The driver tests can be run against several database configurations. The most simple configuration is a standalone mongod with no auth, no ssl, and no compression. To run these basic driver tests, make sure a standalone MongoDB server instance is running at localhost:27017. To run the tests, you can run `make` (on Windows, run `nmake`) with the following:
128
129```
130TOPOLOGY=server make
131```
132
133The `TOPOLOGY`variable must be set to run tests. This will run coverage, run go-lint, run go-vet, and build the examples.
134
135### Testing Different Topologies
136
137To test a **replica set**, set `MONGODB_URI="<connection-string>"` and `TOPOLOGY=replica_set` for the `make` command. For example, for a local replica set named `rs1` comprised of three nodes on ports 27017, 27018, and 27019:
138
139```
140MONGODB_URI="mongodb://localhost:27017,localhost:27018,localhost:27018/?replicaSet=rs1" TOPOLOGY=replica_set make
141```
142
143To test a **sharded cluster**, set `MONGODB_URI="<connection-string>"` and `TOPOLOGY=sharded_cluster` variables for the `make` command. For example, for a sharded cluster with a single mongos on port 27017:
144
145```
146MONGODB_URI="mongodb://localhost:27017/" TOPOLOGY=sharder_cluster make
147```
148
149### Testing Auth and SSL
150
151To test authentication and SSL, first set up a MongoDB cluster with auth and SSL configured. Testing authentication requires a user with the `root` role on the `admin` database. The Go Driver repository comes with example certificates in the `data/certificates` directory. These certs can be used for testing. Here is an example command that would run a mongod with SSL correctly configured for tests:
152
153```
154mongod \
155--auth \
156--sslMode requireSSL \
157--sslPEMKeyFile $(pwd)/data/certificates/server.pem \
158--sslCAFile $(pwd)/data/certificates/ca.pem \
159--sslWeakCertificateValidation
160```
161
162To run the tests with `make`, set `MONGO_GO_DRIVER_CA_FILE` to the location of the CA file used by the database, set `MONGODB_URI` to the connection string of the server, set `AUTH=auth`, and set `SSL=ssl`. For example:
163
164```
165AUTH=auth SSL=ssl MONGO_GO_DRIVER_CA_FILE=$(pwd)/data/certificates/ca.pem  MONGODB_URI="mongodb://user:password@localhost:27017/?authSource=admin" make
166```
167
168Notes:
169- The `--sslWeakCertificateValidation` flag is required on the server for the test suite to work correctly.
170- The test suite requires the auth database to be set with `?authSource=admin`, not `/admin`.
171
172### Testing Compression
173
174The MongoDB Go Driver supports wire protocol compression using Snappy or zLib. To run tests with wire protocol compression, set `MONGO_GO_DRIVER_COMPRESSOR` to `snappy` or `zlib`.  For example:
175
176```
177MONGO_GO_DRIVER_COMPRESSOR=snappy make
178```
179
180Ensure the [`--networkMessageCompressors` flag](https://docs.mongodb.com/manual/reference/program/mongod/#cmdoption-mongod-networkmessagecompressors) on mongod or mongos includes `zlib` if testing zLib compression.
181
182-------------------------
183## Feedback
184
185The MongoDB Go Driver is not feature complete, so any help is appreciated. Check out the [project page](https://jira.mongodb.org/browse/GODRIVER)
186for tickets that need completing. See our [contribution guidelines](CONTRIBUTING.md) for details.
187
188-------------------------
189## Continuous Integration
190
191Commits to master are run automatically on [evergreen](https://evergreen.mongodb.com/waterfall/mongo-go-driver).
192
193-------------------------
194## Thanks and Acknowledgement
195
196<a href="https://github.com/ashleymcnamara">@ashleymcnamara</a> - Mongo Gopher Artwork
197
198-------------------------
199## License
200
201The MongoDB Go Driver is licensed under the [Apache License](LICENSE).
202