首頁 > 後端開發 > Golang > 主體

如何使用 Go 驅動程式在 MongoDB 中建立巢狀 OR/AND 查詢篩選器?

Barbara Streisand
發布: 2024-11-26 22:15:11
原創
374 人瀏覽過

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

Go 中的MongoDB 巢狀OR/AND 查詢過濾器

MongoDB Go 驅動程式可讓您使用$or 和$ 建立複雜的查詢過濾器和運營商。但是,如果您需要在這些頂級運算符中建立嵌套運算符,則由於驅動程式使用 bson.D 和 bson.E 元素,該過程可能會有點混亂。

以下範例示範如何建立巢狀OR/AND 查詢篩選器:

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)
    }
}
登入後複製

在此範例:

  • 頂層$and運算子由bson.D 切片表示。
  • $and 運算子中的 $or 運算子也由 bson.D 切片表示。
  • $or 運算子中的每個條件都表示由 bson.D 元素組成。

需要注意的是,$and 運算子是預設的,因此您不必明確指定它。但是,如果您想在 $and 中嵌套其他運算符,則需要使用 bson.A 切片來表示條件陣列。

以上是如何使用 Go 驅動程式在 MongoDB 中建立巢狀 OR/AND 查詢篩選器?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板