Skip to content
Santekno.com | Level Up Your Engineering Skills
ID
📖 0%
04 Apr 2023 · 5 mnt baca ·Artikel 92 / 119
Go

Cara Koneksi Golang Dengan Mongodb

IH
Ihsan Arif
Penulis di Santekno · Backend Engineer

Dependecy yang dibutuhkan

Menambahkan beberapa dependency yang digunakan

go
1"go.mongodb.org/mongo-driver/bson"
2"go.mongodb.org/mongo-driver/mongo"
3"go.mongodb.org/mongo-driver/mongo/options"

Membuat Koneksi Database

membuat fungsi koneksi database ke dalam mongodb.

go
 1func connect() (*mongo.Database, error) {
 2	clientOptions := options.Client()
 3	clientOptions.ApplyURI("mongodb+srv://test:test@cluster0.awkve.mongodb.net/?retryWrites=true&w=majority")
 4	client, err := mongo.NewClient(clientOptions)
 5	if err != nil {
 6		return nil, err
 7	}
 8
 9	err = client.Connect(context.Background())
10	if err != nil {
11		return nil, err
12	}
13
14	return client.Database("recordings"), nil
15}

Berbeda dengan yang lain bahwa untuk melakukan koneksi ini kita perlu inisialisasi koneksi selanjutnya kita buat koneksi ke dalam database mongodb.

go
1clientOptions := options.Client()
2clientOptions.ApplyURI("mongodb+srv://test:test@cluster0.awkve.mongodb.net/?retryWrites=true&w=majority")

Lalu dilanjutkan dengan membuat client inisialisasi digunakan agar client memastikan koneksi ke dalam database mongodb.

go
1client, err := mongo.NewClient(clientOptions)
2if err != nil {
3  return nil, err
4}

Selanjutnya kita buat connect agar kita pastikan koneksinya ke dalam database.

go
1err = client.Connect(context.Background())
2if err != nil {
3  return nil, err
4}

Diakhiri dengan memilih database (collection) mana yang akan kita pilih.

go
1return client.Database("recordings"), nil

Membuat fungsi Tambah data ke dalam Album

Pada fungsi tambah data kita perlu memanggil koneksi terlebih dahulu agar kita bisa mengambil data colection dan insert data ke dalam database.

go
 1func insert() {
 2	db, err := connect()
 3	if err != nil {
 4		log.Fatal(err.Error())
 5	}
 6
 7	ctx := context.Background()
 8
 9	_, err = db.Collection("album").InsertOne(ctx, Album{ID: 1, Title: "Hari Yang Cerah", Artist: "Peterpan", Price: 50000})
10	if err != nil {
11		log.Fatal(err.Error())
12	}
13
14	_, err = db.Collection("album").InsertOne(ctx, Album{ID: 2, Title: "Sebuah Nama Sebuah Cerita", Artist: "Peterpan", Price: 50000})
15	if err != nil {
16		log.Fatal(err.Error())
17	}
18
19	fmt.Println("Insert success!")
20}
Perintah untuk insert ini digunakan yaitu InsertOne yang mana kita menyimpan satu data collection ke dalam database recordings.
go
1_, err = db.Collection("album").InsertOne(ctx, Album{ID: 1, Title: "Hari Yang Cerah", Artist: "Peterpan", Price: 50000})
2if err != nil {
3  log.Fatal(err.Error())
4}

Membuat Menampilkan album

Selanjutnya kita akan membuat fungsi mengambil data ke dalam mongodb untuk dengan id = . Berikut fungsi lengkapnya.

go
 1func find() {
 2	ctx := context.Background()
 3	db, err := connect()
 4	if err != nil {
 5		log.Fatal(err.Error())
 6	}
 7
 8	csr, err := db.Collection("album").Find(ctx, bson.M{"id": 1})
 9	if err != nil {
10		log.Fatal(err.Error())
11	}
12	defer csr.Close(ctx)
13
14	result := make([]Album, 0)
15	for csr.Next(ctx) {
16		var row Album
17		err := csr.Decode(&row)
18		if err != nil {
19			log.Fatal(err.Error())
20		}
21
22		result = append(result, row)
23	}
24
25	if len(result) > 0 {
26		fmt.Println("Title  :", result[0].Title)
27		fmt.Println("Artist :", result[0].Artist)
28		fmt.Println("Price  :", result[0].Price)
29	}
30}
Saat mengambil data ke dalam mongodb kita mengambil collection albumlalu kita pakai fungsiFind` untuk mengambil salah satu data yang amna disini kita gunakan adalah id nomor satu.
go
1csr, err := db.Collection("album").Find(ctx, bson.M{"id": 1})
2if err != nil {
3  log.Fatal(err.Error())
4}
5defer csr.Close(ctx)

Jangan lupa setiap conection db kita tutup dengan memanggil perintah dibawah ini.

go
1defer csr.Close(ctx)

Selanjutnya kita akan menyimpan data hasil query ke dalam variable yang nantinya kita kirim ke dalam main fungsi.

go
 1result := make([]Album, 0)
 2for csr.Next(ctx) {
 3  var row Album
 4  err := csr.Decode(&row)
 5  if err != nil {
 6    log.Fatal(err.Error())
 7  }
 8
 9  result = append(result, row)
10}
11
12if len(result) > 0 {
13  fmt.Println("Title  :", result[0].Title)
14  fmt.Println("Artist :", result[0].Artist)
15  fmt.Println("Price  :", result[0].Price)
16}

Menampilkan data keseluruhan Album

Pada fungsi ini kita ingin mengambil semua data yang ada pada album collection agar bisa ditampilkan secara keseluruhan.

go
 1func findall() {
 2	ctx := context.Background()
 3	db, err := connect()
 4	if err != nil {
 5		log.Fatal(err.Error())
 6	}
 7
 8	csr, err := db.Collection("album").Find(ctx, bson.D{})
 9	if err != nil {
10		log.Fatal(err.Error())
11	}
12	defer csr.Close(ctx)
13
14	result := make([]Album, 0)
15	for csr.Next(ctx) {
16		var row Album
17		err := csr.Decode(&row)
18		if err != nil {
19			log.Fatal(err.Error())
20		}
21
22		result = append(result, row)
23	}
24
25	if len(result) > 0 {
26		for _, res := range result {
27			fmt.Println("Title  :", res.Title)
28			fmt.Println("Artist :", res.Artist)
29			fmt.Println("Price  :", res.Price)
30		}
31	}
32}

Kita akan memanggil fungsi yang sama seperti yang diatas tetapi output fungsi pada fungsi ini mengeluarkan array struct Album

Melakukan Ubah data Album

Pada saat kita ingin mengubah data album disini perlu memilih id mana yang akan kita update agar bisa diterima. Berikut ini fungsi untuk melakukan update pada collection database mongodb.

go
 1func update() {
 2	ctx := context.Background()
 3	db, err := connect()
 4	if err != nil {
 5		log.Fatal(err.Error())
 6	}
 7
 8	var selector = bson.M{"id": 2}
 9	var changes = Album{ID: 2, Title: "Bintang Di surga", Artist: "Peterpan", Price: 60000}
10	_, err = db.Collection("album").UpdateOne(ctx, selector, bson.M{"$set": changes})
11	if err != nil {
12		log.Fatal(err.Error())
13	}
14
15	fmt.Println("Update success!")
16}
Berbeda dengan query yang diatas, untuk fungsi update kita perlu melakukan set selector agar kita tahu mana yang akan kita update datanya. Lalu dilanjutkan dengan changes yang akan kita update

go
1var selector = bson.M{"id": 2}
2var changes = Album{ID: 2, Title: "Bintang Di surga", Artist: "Peterpan", Price: 60000}
Setelah itu kita gunakan fungsi UpdateOne untuk melakukan update ke dalam database mongodb.
go
1_, err = db.Collection("album").UpdateOne(ctx, selector, bson.M{"$set": changes})
2if err != nil {
3  log.Fatal(err.Error())
4}

Melakukan Hapus Data Album

Fungsi selanjutnya yaitu kita menambahkan fungsi hapus album. Dalam hal ini kita ingin menghapus data koleksi id 2 dengan fungsi lengkapnya dibawah ini.

go
 1func remove() {
 2	ctx := context.Background()
 3	db, err := connect()
 4	if err != nil {
 5		log.Fatal(err.Error())
 6	}
 7
 8	var selector = bson.M{"id": 2}
 9	_, err = db.Collection("album").DeleteOne(ctx, selector)
10	if err != nil {
11		log.Fatal(err.Error())
12	}
13
14	fmt.Println("Remove success!")
15}
Seperti halnya update, kita juga perlu menyelesi mana yang akan kita update contoh disini yaitu menggunakan bson.M{"id", 2} yang akan kita hapus. Selanjutnya kita eksekusi dengan fungsi DeleteOne.
go
1var selector = bson.M{"id": 2}
2_, err = db.Collection("album").DeleteOne(ctx, selector)
3if err != nil {
4  log.Fatal(err.Error())
5}

Baiklah, semua fungsi sudah kita definisikan tingal kita memanggil tiap fungsi yang sudah kita definisikan ke dalam main fungsi yang mana akan kita eksekusi ke depannya.

Artikel Terkait

💬 Komentar