Cara yang disarankan untuk mulai menggunakan driver MongoDB Go adalah dengan menggunakan modul Go untuk menginstal dependensi di proyek Anda. Ini dapat dilakukan dengan mengimpor paket dari dep ensure -add "go.mongodb.org/mongo-driver/mongo"4 dan membuat langkah build menginstal dependensi atau dengan menjalankan secara eksplisit
go get go.mongodb.org/mongo-driver/mongo_
Saat menggunakan versi Go yang tidak mendukung modul, driver dapat diinstal menggunakan dep ensure -add "go.mongodb.org/mongo-driver/mongo"5 dengan menjalankan
dep ensure -add "go.mongodb.org/mongo-driver/mongo"
Penggunaan
Untuk memulai driver, impor paket dep ensure -add "go.mongodb.org/mongo-driver/mongo"6 dan buat dep ensure -add "go.mongodb.org/mongo-driver/mongo"7 dengan fungsi dep ensure -add "go.mongodb.org/mongo-driver/mongo"8
import ( "context" "time" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" "go.mongodb.org/mongo-driver/mongo/readpref" ) ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) defer cancel() client, err := mongo.Connect(ctx, options.Client().ApplyURI("mongodb://localhost:27017"))
Pastikan untuk menunda panggilan ke dep ensure -add "go.mongodb.org/mongo-driver/mongo"_9 setelah membuat instance klien Anda
defer func() { if err = client.Disconnect(ctx); err != nil { panic(err) } }()_
Untuk konfigurasi dan otentikasi lebih lanjut, lihat
Memanggil dep ensure -add "go.mongodb.org/mongo-driver/mongo"_8 tidak memblokir penemuan server. Jika Anda ingin mengetahui apakah server MongoDB telah ditemukan dan terhubung, gunakan metode import ( "context" "time" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" "go.mongodb.org/mongo-driver/mongo/readpref" ) ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) defer cancel() client, err := mongo.Connect(ctx, options.Client().ApplyURI("mongodb://localhost:27017"))1
ctx, cancel = context.WithTimeout(context.Background(), 2*time.Second) defer cancel() err = client.Ping(ctx, readpref.Primary())
Untuk memasukkan dokumen ke dalam koleksi, pertama-tama ambil import ( "context" "time" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" "go.mongodb.org/mongo-driver/mongo/readpref" ) ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) defer cancel() client, err := mongo.Connect(ctx, options.Client().ApplyURI("mongodb://localhost:27017"))2 lalu import ( "context" "time" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" "go.mongodb.org/mongo-driver/mongo/readpref" ) ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) defer cancel() client, err := mongo.Connect(ctx, options.Client().ApplyURI("mongodb://localhost:27017"))3 instance dari import ( "context" "time" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" "go.mongodb.org/mongo-driver/mongo/readpref" ) ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) defer cancel() client, err := mongo.Connect(ctx, options.Client().ApplyURI("mongodb://localhost:27017"))4
collection := client.Database("testing").Collection("numbers")
Contoh import ( "context" "time" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" "go.mongodb.org/mongo-driver/mongo/readpref" ) ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) defer cancel() client, err := mongo.Connect(ctx, options.Client().ApplyURI("mongodb://localhost:27017"))_3 kemudian dapat digunakan untuk menyisipkan dokumen
ctx, cancel = context.WithTimeout(context.Background(), 5*time.Second) defer cancel() res, err := collection.InsertOne(ctx, bson.D{{"name", "pi"}, {"value", 3.14159}}) id := res.InsertedID
Untuk menggunakan import ( "context" "time" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" "go.mongodb.org/mongo-driver/mongo/readpref" ) ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) defer cancel() client, err := mongo.Connect(ctx, options.Client().ApplyURI("mongodb://localhost:27017"))_6, Anda perlu menambahkan import ( "context" "time" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" "go.mongodb.org/mongo-driver/mongo/readpref" ) ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) defer cancel() client, err := mongo.Connect(ctx, options.Client().ApplyURI("mongodb://localhost:27017"))7 ke impor Anda
Pernyataan impor Anda sekarang akan terlihat seperti ini
import ( "context" "log" "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" )
Beberapa metode kueri mengembalikan kursor, yang dapat digunakan seperti ini
ctx, cancel = context.WithTimeout(context.Background(), 30*time.Second) defer cancel() cur, err := collection.Find(ctx, bson.D{}) if err != nil { log.Fatal(err) } defer cur.Close(ctx) for cur.Next(ctx) { var result bson.D err := cur.Decode(&result) if err != nil { log.Fatal(err) } // do something with result.... } if err := cur.Err(); err != nil { log.Fatal(err) }
Untuk metode yang mengembalikan satu item, instance import ( "context" "time" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" "go.mongodb.org/mongo-driver/mongo/readpref" ) ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) defer cancel() client, err := mongo.Connect(ctx, options.Client().ApplyURI("mongodb://localhost:27017"))8 dikembalikan
var result struct { Value float64 } filter := bson.D{{"name", "pi"}} ctx, cancel = context.WithTimeout(context.Background(), 5*time.Second) defer cancel() err = collection.FindOne(ctx, filter).Decode(&result) if err == mongo.ErrNoDocuments { // Do something when no record was found fmt.Println("record does not exist") } else if err != nil { log.Fatal(err) } // Do something with result...
Contoh dan dokumentasi tambahan dapat ditemukan di bawah direktori contoh dan di situs web Dokumentasi MongoDB
Masukan
Untuk bantuan dengan driver, silakan posting di Forum Komunitas MongoDB
Fitur dan bug baru dapat dilaporkan di jira. https. // jira. mongodb. org/browse/GODRIVER
Pengujian / Pengembangan
Tes driver dapat dijalankan terhadap beberapa konfigurasi database. Konfigurasi paling sederhana adalah mongod mandiri tanpa autentikasi, tanpa ssl, dan tanpa kompresi. Untuk menjalankan pengujian driver dasar ini, pastikan instance server MongoDB mandiri berjalan di localhost. 27017. Untuk menjalankan pengujian, Anda dapat menjalankan import ( "context" "time" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" "go.mongodb.org/mongo-driver/mongo/readpref" ) ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) defer cancel() client, err := mongo.Connect(ctx, options.Client().ApplyURI("mongodb://localhost:27017"))_9 (pada Windows, jalankan defer func() { if err = client.Disconnect(ctx); err != nil { panic(err) } }()0). Ini akan menjalankan cakupan, menjalankan go-lint, menjalankan go-vet, dan membuat contoh
Menguji Topologi Berbeda
Untuk menguji kumpulan replika atau klaster pecahan, tetapkan defer func() { if err = client.Disconnect(ctx); err != nil { panic(err) } }()1 untuk perintah import ( "context" "time" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" "go.mongodb.org/mongo-driver/mongo/readpref" ) ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) defer cancel() client, err := mongo.Connect(ctx, options.Client().ApplyURI("mongodb://localhost:27017"))9. Misalnya, untuk set replika lokal bernama defer func() { if err = client.Disconnect(ctx); err != nil { panic(err) } }()3 terdiri dari tiga node pada port 27017, 27018, dan 27019
dep ensure -add "go.mongodb.org/mongo-driver/mongo"0
Menguji Autentikasi dan TLS
Untuk menguji autentikasi dan TLS, pertama-tama siapkan klaster MongoDB dengan konfigurasi autentikasi dan TLS. Otentikasi pengujian memerlukan pengguna dengan peran defer func() { if err = client.Disconnect(ctx); err != nil { panic(err) } }()4 di database defer func() { if err = client.Disconnect(ctx); err != nil { panic(err) } }()5. Berikut adalah contoh perintah yang akan menjalankan mongod dengan TLS yang dikonfigurasi dengan benar untuk pengujian. Setel atau ganti PATH_TO_SERVER_KEY_FILE dan PATH_TO_CA_FILE dengan jalur ke file masing-masing
dep ensure -add "go.mongodb.org/mongo-driver/mongo"_1
Untuk menjalankan tes dengan import ( "context" "time" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" "go.mongodb.org/mongo-driver/mongo/readpref" ) ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) defer cancel() client, err := mongo.Connect(ctx, options.Client().ApplyURI("mongodb://localhost:27017"))_9, atur
- defer func() { if err = client.Disconnect(ctx); err != nil { panic(err) } }()_7 ke lokasi file CA yang digunakan oleh database
- defer func() { if err = client.Disconnect(ctx); err != nil { panic(err) } }()_8 ke lokasi file kunci klien
- defer func() { if err = client.Disconnect(ctx); err != nil { panic(err) } }()_9 ke lokasi file kunci klien pkcs8 yang dienkripsi dengan string kata sandi. ctx, cancel = context.WithTimeout(context.Background(), 2*time.Second) defer cancel() err = client.Ping(ctx, readpref.Primary())0
- ctx, cancel = context.WithTimeout(context.Background(), 2*time.Second) defer cancel() err = client.Ping(ctx, readpref.Primary())1 ke lokasi file kunci pkcs8 yang tidak dienkripsi
- ctx, cancel = context.WithTimeout(context.Background(), 2*time.Second) defer cancel() err = client.Ping(ctx, readpref.Primary())2 ke string koneksi server
- ctx, cancel = context.WithTimeout(context.Background(), 2*time.Second) defer cancel() err = client.Ping(ctx, readpref.Primary())3
- ctx, cancel = context.WithTimeout(context.Background(), 2*time.Second) defer cancel() err = client.Ping(ctx, readpref.Primary())4
Sebagai contoh
dep ensure -add "go.mongodb.org/mongo-driver/mongo"_2
Catatan
- Bendera ctx, cancel = context.WithTimeout(context.Background(), 2*time.Second) defer cancel() err = client.Ping(ctx, readpref.Primary())_5 diperlukan di server agar test suite berfungsi dengan benar
- Test suite membutuhkan database autentikasi untuk diatur dengan ctx, cancel = context.WithTimeout(context.Background(), 2*time.Second) defer cancel() err = client.Ping(ctx, readpref.Primary())6, bukan ctx, cancel = context.WithTimeout(context.Background(), 2*time.Second) defer cancel() err = client.Ping(ctx, readpref.Primary())7
Menguji Kompresi
Driver MongoDB Go mendukung kompresi protokol kabel menggunakan Snappy, zLib, atau zstd. Untuk menjalankan pengujian dengan kompresi protokol kabel, setel ctx, cancel = context.WithTimeout(context.Background(), 2*time.Second) defer cancel() err = client.Ping(ctx, readpref.Primary())8 ke ctx, cancel = context.WithTimeout(context.Background(), 2*time.Second) defer cancel() err = client.Ping(ctx, readpref.Primary())9, collection := client.Database("testing").Collection("numbers")0, atau collection := client.Database("testing").Collection("numbers")1. Sebagai contoh
dep ensure -add "go.mongodb.org/mongo-driver/mongo"_3
Pastikan on mongod atau mongos menyertakan collection := client.Database("testing").Collection("numbers")0 jika menguji kompresi zLib
Kontribusi
Lihat halaman proyek untuk tiket yang perlu diselesaikan. Lihat panduan kontribusi kami untuk detailnya