Go 드라이버를 사용하여 MongoDB에서 중첩된 OR/AND 쿼리 필터를 만드는 방법은 무엇입니까?

Barbara Streisand
풀어 주다: 2024-11-26 22:15:11
원래의
376명이 탐색했습니다.

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으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿