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} }} }}
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}}, }}, }
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}, }, }
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!