Cara Koneksi Golang Dengan Mongodb
Dependecy yang dibutuhkan
Menambahkan beberapa dependency yang digunakan
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.
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.
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.
1client, err := mongo.NewClient(clientOptions)
2if err != nil {
3 return nil, err
4}Selanjutnya kita buat connect agar kita pastikan koneksinya ke dalam database.
1err = client.Connect(context.Background())
2if err != nil {
3 return nil, err
4}Diakhiri dengan memilih database (collection) mana yang akan kita pilih.
1return client.Database("recordings"), nilMembuat 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.
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}InsertOne yang mana kita menyimpan satu data collection ke dalam database recordings.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.album 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}lalu kita pakai fungsiFind` untuk mengambil salah satu data yang amna disini kita gunakan adalah id nomor satu.
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.
1defer csr.Close(ctx)Selanjutnya kita akan menyimpan data hasil query ke dalam variable yang nantinya kita kirim ke dalam main fungsi.
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.
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.
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}1var selector = bson.M{"id": 2}
2var changes = Album{ID: 2, Title: "Bintang Di surga", Artist: "Peterpan", Price: 60000}UpdateOne untuk melakukan update ke dalam database mongodb.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.
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}bson.M{"id", 2} yang akan kita hapus. Selanjutnya kita eksekusi dengan fungsi DeleteOne.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.