Tutorial ini mengenalkan operasi dasar MongoDB dari sudut pandang bahasa Golang.
Catatan: Tutorial ini menggunakan paket driver bahasa resmi yang disediakan oleh MongoDB untuk Go.
Tutorial Prasyarat
Catatan: Jika Anda tidak familiar dengan MongoDB, silakan pelajari terlebih dahulu pengetahuan tentang MongoDB. Tutorial Golang tidak akan mengulangi pengetahuan yang relevan.
Persyaratan Dasar
- Go 1.10 atau versi lebih tinggi
- MongoDB 2.6 atau versi lebih tinggi
Instalasi Dependencies
go get go.mongodb.org/mongo-driver/mongo
Terhubung ke MongoDB
import (
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
"go.mongodb.org/mongo-driver/mongo/readpref"
)
// Alamat koneksi MongoDB
uri := "mongodb://localhost:27017"
// Dapatkan objek konteks, Anda dapat menetapkan timeout
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()
// Terhubung ke MongoDB
client, err := mongo.Connect(ctx, options.Client().ApplyURI(uri))
Fungsi Connect tidak memblokir goroutine. Artinya, langsung melakukan operasi MongoDB setelah memanggil metode Connect mungkin mengakibatkan kesalahan karena MongoDB belum terhubung dengan sukses. Anda dapat menggunakan metode Ping untuk memeriksa apakah MongoDB telah terhubung dengan sukses.
// Ping MongoDB, jika terhubung dengan sukses, tidak ada kesalahan yang dikembalikan
err = client.Ping(ctx, readpref.Primary())
Alamat Koneksi MongoDB
Alamat koneksi MongoDB mencakup informasi penting seperti alamat server, nomor port, akun, dan kata sandi. Formatnya adalah sebagai berikut:
mongodb://[username:password@]host1[:port1][,...hostN[:portN]][/[defaultauthdb][?options]]
Contoh:
// Terhubung ke alamat localhost:27017 dengan username dan password default
mongodb://localhost:27017
// Terhubung ke alamat localhost:27017 dengan akun=root, kata sandi=123456, dan terhubung ke database default=admin
mongodb://root:123456@localhost:27017/admin
Menyusun Sumber Daya Koneksi
Jika koneksi tidak lagi diperlukan, Anda perlu secara manual melepaskan sumber daya koneksi.
defer func() {
if err = client.Disconnect(ctx); err != nil {
panic(err)
}
}()
Dapatkan Instance Koleksi
Untuk mengoperasikan MongoDB di Golang, Anda perlu mendapatkan instance koleksi terlebih dahulu, dan kemudian Anda dapat melakukan operasi CRUD pada instance koleksi.
// Atur nama database melalui Database, dan atur nama koleksi melalui Collection
collection := client.Database("testing").Collection("numbers")
Catatan: Sesuai dengan karakteristik MongoDB, tidak perlu membuat database dan koleksi sebelumnya. Mereka akan dibuat secara otomatis saat data pertama kali ditulis.
Masukkan Dokumen
Masukkan data menggunakan fungsi InsertOne.
// Objek Konteks, biasanya digunakan untuk mengatur batas waktu permintaan, Anda juga dapat menggunakan kembali objek konteks yang dibuat sebelumnya, tidak perlu mendefinisikannya ulang
ctx, cancel = context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
// Masukkan dokumen, di sini kita menggunakan tipe bson.D untuk mendeskripsikan dokumen JSON, bson.D mewakili sebuah array JSON
res, err := collection.InsertOne(ctx, bson.D{{"name", "pi"}, {"value", 3.14159}})
// Dapatkan id dari dokumen yang baru ditambahkan
id := res.InsertedID
Anda perlu mengimpor paket-paket berikut:
impor (
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
"go.mongodb.org/mongo-driver/mongo/readpref"
)
Catatan: Dalam Golang, paket bson digunakan untuk merepresentasikan struktur data dokumen JSON. Bab-bab berikut akan menjelaskan ekspresi struktur penyimpanan data MongoDB dalam Golang.
pakel utama
impor (
"context"
"fmt"
"time"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
"go.mongodb.org/mongo-driver/mongo/readpref"
)
func utama() {
// Tetapkan alamat koneksi MongoDB
uri := "mongodb://root:123456@localhost:27017/admin"
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()
// Terhubung ke MongoDB
client, err := mongo.Connect(ctx, options.Client().RumusURI(uri))
if err != nil {
panic(err)
}
defer fungsi() {
// Lepaskan koneksi dengan penundaan
jika err = client.Disconnect(ctx); err != nil {
panic(err)
}
}()
// Periksa apakah koneksi MongoDB berhasil
jika err := client.Ping(ctx, readpref.Primary()); err != nil {
panic(err)
}
fmt.Println("MongoDB terhubung dengan sukses!")
// Dapatkan koleksi angka
kumpulan := client.Database("testing").Collection("numbers")
// Masukkan sebuah dokumen
res, err := kumpulan.InsertOne(ctx, bson.D{{"name", "pi"}, {"value", 3.14159}})
id := res.InsertedID
fmt.Println("Id dokumen baru=", id)
}