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.