Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Membina Penapis Pertanyaan Bersarang ATAU/Dan dalam pemacu mongo-go?

Bagaimana untuk Membina Penapis Pertanyaan Bersarang ATAU/Dan dalam pemacu mongo-go?

Patricia Arquette
Patricia Arquetteasal
2024-11-17 19:23:01284semak imbas

How to Construct Nested OR/AND Query Filters in the mongo-go-driver?

Penapis Pertanyaan OR/AND Bersarang dalam pemandu mongo-go

Dalam MongoDB, penapis pertanyaan kompleks boleh melibatkan pengendali logik bersarang seperti OR dan AND. Pemacu mongo-go membolehkan anda membina penapis ini secara pengaturcaraan.

Apabila menggunakan pengendali logik bersarang, adalah penting untuk memahami struktur yang diperlukan oleh pemandu. Sebagai contoh, operator $or memerlukan tatasusunan syarat, diwakili sebagai bson.A. Operator $and, sebaliknya, ialah lalai dan tidak perlu dinyatakan secara eksplisit.

Pertimbangkan contoh berikut di mana anda ingin mencipta penapis dengan keadaan ATAU bersarang dalam keadaan AND:

filter := bson.M{
    "p": 10,
    "$and": bson.D{{"s", 30}, bson.M{"$or": bson.D{{"a", 1}}}}}
}

Kod ini mengakibatkan ralat kerana ia cuba mencampurkan bson.M dengan bson.D dalam keadaan AND. Untuk membetulkannya, anda perlu menggunakan bson.A untuk keadaan $or dan alih keluar operator $and yang tidak diperlukan:

filter := bson.D{
    {"p", 10},
    {"$or", bson.A{
        bson.D{{"s", 30}},
        bson.D{{"a", 1}},
    }},
}

Sebagai alternatif, anda boleh menggunakan sintaks mudah berikut:

filter := bson.M{
    "p": 10,
    "$or": bson.A{
        bson.M{"s": 30},
        bson.M{"a": 10},
    },
}

Sintaks ini mencipta penapis pertanyaan yang sama seperti contoh sebelumnya. Pilihan sintaks bergantung pada pilihan anda dan kerumitan pertanyaan anda.

Atas ialah kandungan terperinci Bagaimana untuk Membina Penapis Pertanyaan Bersarang ATAU/Dan dalam pemacu mongo-go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn