Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Mencipta Penapis Pertanyaan Bersarang ATAU/Dan dalam MongoDB dengan Pemacu Go?

Bagaimana untuk Mencipta Penapis Pertanyaan Bersarang ATAU/Dan dalam MongoDB dengan Pemacu Go?

Barbara Streisand
Barbara Streisandasal
2024-11-26 22:15:11377semak imbas

How to Create Nested OR/AND Query Filters in MongoDB with the Go Driver?

Penapis Pertanyaan MongoDB Nested OR/AND dalam Go

Pemacu MongoDB Go membolehkan anda mencipta penapis pertanyaan kompleks menggunakan $or dan $ dan pengendali. Walau bagaimanapun, jika anda perlu mencipta pengendali bersarang dalam pengendali peringkat atas ini, prosesnya boleh menjadi agak mengelirukan kerana pemacu menggunakan elemen bson.D dan bson.E.

Contoh berikut menunjukkan cara untuk buat penapis pertanyaan OR/AND bersarang:

package main

import (
    "context"
    "fmt"
    "time"

    "go.mongodb.org/mongo-driver/bson"
    "go.mongodb.org/mongo-driver/mongo"
)

func main() {
    ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
    defer cancel()

    client, err := mongo.NewClient(options.Client().ApplyURI("mongodb://localhost:27017"))
    if err != nil {
        panic(err)
    }
    defer client.Disconnect(ctx)

    collection := client.Database("test").Collection("people")

    // Create a nested OR/AND query filter
    filter := bson.D{
        {
            "$and", bson.A{
                bson.D{{"age", 30}},
                bson.D{{"$or", bson.A{
                    bson.D{{"name", "John"}},
                    bson.D{{"name", "Jane"}},
                }}},
            },
        },
    }

    // Find all people matching the filter
    cur, err := collection.Find(ctx, filter)
    if err != nil {
        panic(err)
    }
    defer cur.Close(ctx)

    // Iterate through the results and print each person's name
    for cur.Next(ctx) {
        var result bson.M
        if err := cur.Decode(&result); err != nil {
            panic(err)
        }
        fmt.Println(result["name"])
    }

    if err := cur.Err(); err != nil {
        panic(err)
    }
}

Dalam contoh ini:

  • Peringkat teratas operator $and diwakili oleh kepingan bson.D.
  • Operator $or dalam operator $and juga diwakili oleh kepingan bson.D.
  • Setiap keadaan dalam operator $or diwakili oleh elemen bson.D.

Adalah penting untuk ambil perhatian bahawa operator $and ialah lalai, jadi anda tidak perlu secara eksplisit nyatakannya. Walau bagaimanapun, jika anda ingin menyarangkan operator lain dalam $and, anda perlu menggunakan kepingan bson.A untuk mewakili susunan keadaan.

Atas ialah kandungan terperinci Bagaimana untuk Mencipta Penapis Pertanyaan Bersarang ATAU/Dan dalam MongoDB dengan Pemacu 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