While looking into working with mongodb using golang, I found it quite frustrating getting it up and running and decided to make a quick post about it.
What are we doing?
Examples using the golang driver for mongodb to connect, read, update and delete documents from mongodb.
packagemainimport("context""fmt""log""go.mongodb.org/mongo-driver/mongo""go.mongodb.org/mongo-driver/bson""go.mongodb.org/mongo-driver/mongo/options")typePersonstruct{NamestringAgeintCitystring}funcmain(){clientOptions:=options.Client().ApplyURI("mongodb://mongodb:27017")client,err:=mongo.Connect(context.TODO(),clientOptions)iferr!=nil{log.Fatal(err)}err=client.Ping(context.TODO(),nil)iferr!=nil{log.Fatal(err)}fmt.Println("Connected to MongoDB!")}
Running our app:
12
$ go run main.go
Connected to MongoDB!
Writing to MongoDB with Golang
Let’s insert a single document to MongoDB:
123456789101112
funcmain(){..collection:=client.Database("mydb").Collection("persons")ruan:=Person{"Ruan",34,"Cape Town"}insertResult,err:=collection.InsertOne(context.TODO(),ruan)iferr!=nil{log.Fatal(err)}fmt.Println("Inserted a Single Document: ",insertResult.InsertedID)}
Running it will produce:
123
$ go run main.go
Connected to MongoDB!
Inserted a single document: ObjectID("5cb717dcf597b4411252341f")
$ go run main.go
Matched 1 documents and updated 1 documents.
Reading Data from MongoDB
Reading the data:
12345678910111213141516
functmain(){..filter:=bson.DvarresultTrainererr=collection.FindOne(context.TODO(),filter).Decode(&result)iferr!=nil{log.Fatal(err)}fmt.Printf("Found a single document: %+v\n",result)findOptions:=options.Find()findOptions.SetLimit(2)}
12
$ go run main.go
Found a single document: {Name:Frankie Age:32 City:Nairobi}
Finding multiple documents and returning the cursor
12345678910111213141516171819202122232425
funcmain(){..varresults[]*Trainercur,err:=collection.Find(context.TODO(),bson.D,findOptions)iferr!=nil{log.Fatal(err)}forcur.Next(context.TODO()){varelemTrainererr:=cur.Decode(&elem)iferr!=nil{log.Fatal(err)}results=append(results,&elem)}iferr:=cur.Err();err!=nil{log.Fatal(err)}cur.Close(context.TODO())fmt.Printf("Found multiple documents (array of pointers): %+v\n",results)}
funcmain(){..deleteResult,err:=collection.DeleteMany(context.TODO(),bson.D)iferr!=nil{log.Fatal(err)}fmt.Printf("Deleted %v documents in the trainers collection\n",deleteResult.DeletedCount)err=client.Disconnect(context.TODO())iferr!=nil{log.Fatal(err)}else{fmt.Println("Connection to MongoDB closed.")}}
Running the example:
123
$ go run main.go
Deleted 3 documents in the trainers collection
Connection to MongoDB closed.