Storing Data in MongoDB with Go - 04
Tags: go, mongodb
Published: 2024-05-18 07:03:11

- First check the Go version by running the command 
```
go version
```

- Create a folder

```
mkdir <folder_name>
```

- Switch to created folder 

```
cd <folder_name>
```
 

- Initialize the go project by running the given command. You will get `go.mod` file.
```
go mod init <folder_name>
```


- Create a `main.go` file, use terminal or bash

```
notepad main.go 
touch main.go
```

- Let's write some basic code in `main.go` file. 

```go
package main 

import (
	"fmt"
)


func main () {
	fmt.Println("Hello From Go")
}

```

- Run the code by following command 

```
go run main.go 
```

- You will see this output in console 

```
Hello From Go
```

- Install some packages to connect MongoDB. Here are commands
```
go get go.mongodb.org/mongo-driver
go get go.mongodb.org/mongo-driver/mongo
```

- Revisit the `main.go` file to connect MongoDB. Add some code to connect MongoDB. This is how it will look after adding.  

```go
package main 

// package importing
import (
    "fmt"

	"log"
	"context"

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


// mongodb connections
var collection *mongo.Collection
var ctx = context.TODO()

func init() {
    clientOptions := options.Client().ApplyURI("mongodb://localhost:27017/")
    client, err := mongo.Connect(ctx, clientOptions)
    if err != nil {
        log.Fatal(err)
    }

    // check connection
    err = client.Ping(ctx, nil)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println("Connected to MongoDB!")

    collection = client.Database("testingWithGo").Collection("movies")
}



// entry point 
func main () {
    fmt.Println("Hello From Go")
}
```

- Run the code by following command

```
go run main.go 
```

- You will see this output in console

```
Connected to MongoDB!
Hello From Go
```

- Till, Our MongoDB is connected. Now let's add some data. We are going to add movie data. So, let's make a movie structure. 

```go
// movie model or structure 
type Movie struct {
	ID    string `json:"id"`
	Title string `json:"title"`
}
```

- Now write a function to add movie to database. 

```go
// to add movie to db
func addMovie(id, title string) {

	movie := Movie{
		ID:    id,
		Title: title,
	}

	_, err := collection.InsertOne(ctx, movie)
	if err != nil {
		log.Fatal(err)
	}

	fmt.Println("Movie added successfully!")
}
```

- Call the addMovie function to main function. 

```go
addMovie("1", "Captain America")
```

- This is how our code will look like after completing above steps

```go
package main 

// package importing
import (
    "fmt"

	"log"
	"context"

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




// mongodb connections
var collection *mongo.Collection
var ctx = context.TODO()

func init() {
    clientOptions := options.Client().ApplyURI("mongodb://localhost:27017/")
    client, err := mongo.Connect(ctx, clientOptions)
    if err != nil {
        log.Fatal(err)
    }

    // check connection
    err = client.Ping(ctx, nil)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println("Connected to MongoDB!")

    collection = client.Database("testingWithGo").Collection("movies")
}



// movie model or structure 
type Movie struct {
	ID    string `json:"id"`
	Title string `json:"title"`
}


// to add movie to db
func addMovie(id, title string) {

	movie := Movie{
		ID:    id,
		Title: title,
	}

	_, err := collection.InsertOne(ctx, movie)
	if err != nil {
		log.Fatal(err)
	}

	fmt.Println("Movie added successfully!")
}




// entry point 
func main () {
    fmt.Println("Hello From Go")

	// callig addMovie 
	addMovie("1", "Captain America")
}
```

- Run the code by following command 

```
go run main.go 
```

- You will see this output in console

```
Connected to MongoDB!
Hello From Go
Movie added successfully!
```

- We have successfully added some data to MongoDB, you can verify in your database, which is your localhost. 

```
mongodb://localhost:27017/
```

That's for this article. Thank You.