Bab ini memperkenalkan penggunaan kueri dokumen MongoDB Golang.
Tutorial Prasyarat
Tip: Jika Anda belum familiar dengan sintaks kueri MongoDB, silakan baca terlebih dahulu tutorial MongoDB. Sintaks ekspresi yang digunakan untuk operasi MongoDB dalam Golang sama.
Persiapkan Data Uji
Sisipkan sekelompok data dokumen ke dalam koleksi coll
.
docs := []interface{}{
bson.D{
{"item", "jurnal"},
{"qty", 25},
{"size", bson.D{
{"h", 14},
{"w", 21},
{"uom", "cm"},
}},
{"status", "A"},
},
// ... (data dokumen lainnya)
}
hasil, err := coll.InsertMany(context.Background(), docs)
Kueri Semua Dokumen
cursor, err := coll.Find(
context.Background(),
bson.D{}, // Tetapkan kondisi kueri kosong
)
Kondisi Kueri Kesetaraan
Mirip dengan pencocokan kesetaraan SQL.
cursor, err := coll.Find(
context.Background(),
bson.D{{"status", "D"}}, // Kondisi setara: status = D
)
Operator Kueri in
Mirip dengan kueri in
pada SQL.
cursor, err := coll.Find(
context.Background(),
bson.D{{"status", bson.D{{"$in", bson.A{"A", "D"}}}}}) // Kondisi setara: status in ('A', 'D')
Kondisi Kueri and
Mirip dengan ekspresi logis and
pada SQL.
cursor, err := coll.Find(
context.Background(),
bson.D{ // Kondisi setara: status='A' dan qty < 30
{"status", "A"},
{"qty", bson.D{{"$lt", 30}}},
})
Kondisi Kueri or
Mirip dengan ekspresi logis or
pada SQL.
cursor, err := coll.Find(
context.Background(),
bson.D{ // Kondisi setara: status = "A" ATAU qty < 30
{"$or", // Menggunakan operator $or
bson.A{ // Menggunakan definisi tipe array bson.A
bson.D{{"status", "A"}},
bson.D{{"qty", bson.D{{"$lt", 30}}}},
}},
})
Contoh Kueri Gabungan
cursor, err := coll.Find(
context.Background(),
bson.D{ // Kondisi setara: status = "A" DAN ( qty < 30 ATAU item KEMASUKAN "p%")
{"status", "A"},
{"$or", bson.A{
bson.D{{"qty", bson.D{{"$lt", 30}}}},
bson.D{{"item", primitive.Regex{Pattern: "^p", Options: ""}}},
}},
})
Traverse Hasil Kueri
Contoh 1
// Kueri dokumen di mana nama adalah 'Bob'
cursor, err := coll.Find(context.TODO(), bson.D{{"name", "Bob"}}, opts)
if err != nil {
log.Fatal(err)
}
// Tentukan array dokumen dari tipe bson.M, di mana bson.M adalah struktur data kunci-nilai yang mirip dengan peta
var results []bson.M
// Gunakan fungsi All untuk mengambil semua hasil kueri dan simpan hasilnya ke variabel hasil
if err = cursor.All(context.TODO(), &results); err != nil {
log.Fatal(err)
}
// Telusuri array hasil
for _, result := range results {
fmt.Println(result)
}
Penjelasan: Contoh menggunakan tipe bson.M untuk menyimpan data dokumen. Anda dapat menyesuaikan tipe struct selama kolomnya sesuai dengan dokumen.
Contoh 2
// Tentukan variabel dari tipe struct untuk menyimpan hasil kueri
var result struct {
Value float64
}
// Tentukan kondisi kueri dokumen name = 'pi'
filter := bson.D{{"name", "pi"}}
// Buat objek konteks dan atur batas waktu kueri menjadi 5 detik
ctx, cancel = context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
// Kueri data tunggal berdasarkan kondisi, dan gunakan fungsi Decode untuk menyimpan hasil ke variabel hasil
err = collection.FindOne(ctx, filter).Decode(&result)
// Periksa kesalahan kueri
if err == mongo.ErrNoDocuments {
// Dokumen tidak ditemukan
fmt.Println("Dokumen tidak ada")
} else if err != nil {
log.Fatal(err)
}
// Penanganan lainnya
Tip: Untuk sintaks ekspresi kueri MongoDB yang lebih canggih, silakan lihat tutorial MongoDB.