Sebelum Anda Memulai
Tutorial ini mengasumsikan Anda memiliki:
- Pemahaman dasar tentang Bahasa Go
- Versi GoLang terbaru terinstal di sistem Anda
- Versi MongoDB terbaru terinstal di sistem Anda
Dalam tutorial ini, kita akan menggunakan Driver MongoDB Go resmi untuk mengelola database MongoDB kami. Dalam prosesnya, kami akan menulis sebuah program untuk mempelajari cara menginstal Driver MongoDB Go dan melakukan operasi CRUD dengannya.
Instalasi
Pertama di folder kosong jalankan perintah di bawah ini
go mod init gomongo
go mod init
membuat file go.mod baru dan secara otomatis mengimpor dependensi saat Anda menjalankan program go. Kemudian buat file main.go dan tulis kode di bawah ini, Kami akan menjelaskan apa yang akan dilakukan kode ini dalam satu menit.
package main
import (
"context"
"fmt"
"log"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
)
// Book - We will be using this Book type to perform crud operations
type Book struct {
Title string
Author string
ISBN string
Publisher string
Copies int
}
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 {
log.Fatal(err)
}
// Check the connection
err = client.Ping(context.TODO(), nil)
if err != nil {
log.Fatal(err)
}
fmt.Println("Connected to MongoDB!")
booksCollection := client.Database("testdb").Collection("books")
}
Pada kode di atas, kita telah mengimpor paket bson, mongo, dan mongo/options dari mongo-driver dan mendefinisikan Book
jenis yang akan digunakan dalam tutorial ini
Di fungsi utama terlebih dahulu, kami membuat clientOptions dengan URL dan kredensial MongoDB dan meneruskannya ke mongo.Connect
fungsi, Setelah terhubung, kita dapat memeriksa koneksi kita dengan client.Ping
fungsi.
Kode berikut akan menggunakan booksCollection
variabel untuk menanyakan books
koleksi dari testdb.
booksCollection := client.Database("testdb").Collection("books")
Sisipkan Dokumen
Pertama mari kita buat struct Buku untuk dimasukkan ke dalam koleksi, pada kode di bawah ini kita menggunakan collection.InsertOne
berfungsi untuk menyisipkan satu dokumen ke dalam koleksi
// Insert One document
book1 := Book{"Animal Farm", "George Orwell", "0451526341", "Signet Classics", 100}
insertResult, err := booksCollection.InsertOne(context.TODO(), book1)
if err != nil {
log.Fatal(err)
}
fmt.Println("Inserted a single document: ", insertResult.InsertedID)
Untuk menyisipkan beberapa dokumen sekaligus, kita perlu membuat sepotong Book
objek dan berikan ke collection.InsertMany
// Insert multiple documents
book2 := Book{"Super Freakonomics", "Steven D. Levitt", "0062312871", "HARPER COLLINS USA", 100}
book3 := Book{"The Alchemist", "Paulo Coelho", "0062315005", "HarperOne", 100}
multipleBooks := []interface{}{book2, book3}
insertManyResult, err := booksCollection.InsertMany(context.TODO(), multipleBooks)
if err != nil {
log.Fatal(err)
}
fmt.Println("Inserted multiple documents: ", insertManyResult.InsertedIDs)
Perbarui Dokumen
Kami dapat memperbarui satu dokumen dengan fungsi collection.UpdateOne
. Ini membutuhkan dokumen filter untuk mencocokkan dokumen dalam koleksi dan dokumen yang diperbarui untuk menjelaskan operasi pembaruan. Anda dapat membangun ini menggunakan tipe bson.D. Kode di bawah ini akan cocok dengan buku dengan ISBN 0451526341 dan tambah bidang salinan sebesar 10
//Update one document
filter := bson.D{{"isbn", "0451526341"}}
update := bson.D{
{"$inc", bson.D{
{"copies", 10},
}},
}
updateResult, err := booksCollection.UpdateOne(context.TODO(), filter, update)
if err != nil {
log.Fatal(err)
}
fmt.Printf("Matched %v documents and updated %v documents.\n", updateResult.MatchedCount, updateResult.ModifiedCount)
Anda juga dapat memperbarui lebih dari satu dokumen sekaligus dalam satu koleksi dengan fungsi
collection.UpdateMany
, Di dalamnya, kita perlu melewati dokumen filter dan memperbarui dokumen yang sama dengancollection.UpdateOne
Temukan Dokumen
Untuk menemukan satu dokumen, kita dapat menggunakan fungsi collection.FindOne()
, kami akan melewati dokumen filter dan mendekode hasilnya di Book
jenis variabel
// A variable in which result will be decoded
var result Book
err = booksCollection.FindOne(context.TODO(), filter).Decode(&result)
if err != nil {
log.Fatal(err)
}
fmt.Printf("Found a single document: %+v\n", result)
Untuk menemukan banyak dokumen, kami menggunakan fungsi collection.Find()
. Metode ini mengembalikan Kursor, Ini menyediakan aliran dokumen yang dapat kita ulangi atau kita bisa mendapatkan semua dokumen dengan fungsi cursor.All()
dalam sepotong Book
Tipe.
cursor, err := booksCollection.Find(context.TODO(), bson.D{{}})
if err != nil {
log.Fatal(err)
}
var books []Book
if err = cursor.All(context.TODO(), &books); err != nil {
log.Fatal(err)
}
fmt.Printf("Found multiple documents: %+v\n", books)
Hapus Dokumen
Kita dapat menghapus dokumen dari koleksi menggunakan fungsi collection.DeleteOne()
atau collection.DeleteMany()
. Di sini Anda meneruskan bson.D{}} sebagai argumen filter, yang akan cocok dengan semua dokumen dalam koleksi.
deleteCollection, err := booksCollection.DeleteMany(context.TODO(), bson.D{{}})
if err != nil {
log.Fatal(err)
}
fmt.Printf("Deleted %v documents in the books collection\n", deleteCollection.DeletedCount)
Seluruh koleksi dapat dibuang menggunakan fungsi collection.Drop(), ini akan menghapus semua dokumen dan metadata, seperti indeks dari koleksi
Setelah Anda melakukan semua operasi, jangan lupa untuk menutup koneksi MongoDB
err = client.Disconnect(context.TODO())
if err != nil {
log.Fatal(err)
}
fmt.Println("Connection to MongoDB closed.")
Sekarang Anda dapat dengan mudah menggunakan MongoDB sebagai Sumber Data di aplikasi go Anda, Anda dapat menemukan kode lengkap yang digunakan dalam tutorial ini di Repo Github kami