Introduction

MongoDB is a popular NoSQL database that stores data in a flexible, JSON-like format. In this guide, you'll learn how to connect Go to MongoDB and perform CRUD (Create, Read, Update, Delete) operations on a MongoDB database. We'll cover key concepts, installing the Go MongoDB driver, connecting to MongoDB, and sample code for each CRUD operation.


Key Concepts

Before we dive into CRUD operations, let's cover some key MongoDB concepts:

  • Document: In MongoDB, data is stored as JSON-like documents. Documents can contain key-value pairs and nested structures.
  • Collection: A collection is a group of MongoDB documents, similar to a table in a relational database.
  • Database: MongoDB can manage multiple collections within a database, serving as a high-level container for collections.

Installing the Go MongoDB Driver

To work with MongoDB in Go, you need to install the official Go MongoDB driver "mongo-go-driver." You can install it using the following command:

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

Connecting to MongoDB

Before performing CRUD operations, you must establish a connection to MongoDB. Here's how to create a connection and connect to a MongoDB server:

package main
import (
"context"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
)
func main() {
// Set client options
clientOptions := options.Client().ApplyURI("mongodb://localhost:27017")
// Connect to MongoDB
client, err := mongo.Connect(context.TODO(), clientOptions)
if err != nil {
panic(err)
}
}

Create (Insert) Operation

To insert a document into a MongoDB collection, you can use the InsertOne method. Here's an example:

// Insert a new document into a collection
collection := client.Database("mydb").Collection("mycollection")
_, err := collection.InsertOne(context.TODO(), bson.M{"name": "John Doe", "age": 30})
if err != nil {
panic(err)
}

Read Operation

To retrieve documents from a MongoDB collection, you can use the Find method. Here's an example:

// Retrieve documents from a collection
collection := client.Database("mydb").Collection("mycollection")
cursor, err := collection.Find(context.TODO(), bson.M{"name": "John Doe"})
if err != nil {
panic(err)
}
defer cursor.Close(context.TODO())
for cursor.Next(context.TODO()) {
var result bson.M
err := cursor.Decode(&result)
if err != nil {
panic(err)
}
// Process the retrieved document
}

Update Operation

To update a document in a MongoDB collection, you can use the UpdateOne or UpdateMany methods. Here's an example of updating a single document:

// Update a document in a collection
filter := bson.M{"name": "John Doe"}
update := bson.M{"$set": bson.M{"age": 31}}
_, err := collection.UpdateOne(context.TODO(), filter, update)
if err != nil {
panic(err)
}

Delete Operation

To remove documents from a MongoDB collection, you can use the DeleteOne or DeleteMany methods. Here's an example of deleting a single document:

// Delete a document from a collection
_, err := collection.DeleteOne(context.TODO(), bson.M{"name": "John Doe"})
if err != nil {
panic(err)
}

Conclusion

This guide has provided an introduction to connecting Go to MongoDB and performing CRUD operations. We covered key MongoDB concepts, installing the Go MongoDB driver, connecting to MongoDB, and sample code for each CRUD operation. With this knowledge, you can start building Go applications that interact with MongoDB databases effectively.


Further Resources

To further explore MongoDB, Go, and NoSQL databases, consider the following resources: