Bagaimana untuk membuat penapis pertanyaan OR/AND bersarang dalam Mongo-Go-Driver?

Susan Sarandon
Lepaskan: 2024-11-18 02:16:02
asal
700 orang telah melayarinya

How to create nested OR/AND query filters in Mongo-Go-Driver?

Penapis Pertanyaan Bersarang ATAU/Dan dalam Mongo-Go-Driver

Apabila membuat penapis pertanyaan kompleks dalam MongoDB menggunakan pemacu Go, ia adalah perkara biasa memerlukan pengendali bersarang seperti ATAU dan DAN. Walau bagaimanapun, pemandu rasmi memerlukan penggunaan elemen bson.D dan bson.E untuk membina penapis.

Untuk mengendalikan operasi OR/AND bersarang, anda boleh menggabungkan objek bson.D dan bson.M.

Pertimbangkan contoh berikut di mana anda ingin mencipta penapis DAN dengan keadaan OR bersarang:

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

Pendekatan ini akan mengakibatkan ralat berikut: "tidak boleh menggunakan literal.M primitif (jenis primitif .M) sebagai jenis primitif.E dalam slice literal."

Untuk menyelesaikan isu ini, anda boleh mentakrifkan penapis seperti berikut:

filter := bson.D{
    {"p", 10},
    {"$or", bson.A{
        bson.D{{"s", 30}},
        bson.D{{"a", 10}},
    }},
}
Salin selepas log masuk

Di sini, bukannya menggunakan bson.D dalam bson.D untuk keadaan OR bersarang, kami menggunakan bson.A (susunan elemen bson.D). Ini kerana $or menjangkakan tatasusunan penapis.

Pilihan lain ialah menggunakan bson.M untuk kedua-dua penapis DAN utama dan keadaan OR bersarang:

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

Dalam kes ini, anda boleh menggunakan bson.M dan bukannya bson.D untuk mentakrifkan keadaan OR bersarang, kerana bson.A juga membenarkan elemen bson.M.

Atas ialah kandungan terperinci Bagaimana untuk membuat penapis pertanyaan OR/AND bersarang dalam Mongo-Go-Driver?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan