Maison > développement back-end > Golang > le corps du texte

Comment créer des filtres de requêtes OR/AND imbriqués dans MongoDB avec le pilote Go ?

Barbara Streisand
Libérer: 2024-11-26 22:15:11
original
374 Les gens l'ont consulté

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

Filtre de requête OR/AND imbriqué MongoDB dans Go

Le pilote MongoDB Go vous permet de créer des filtres de requête complexes à l'aide de $or et $ et les opérateurs. Cependant, si vous devez créer des opérateurs imbriqués au sein de ces opérateurs de niveau supérieur, le processus peut être un peu déroutant en raison de l'utilisation par le pilote des éléments bson.D et bson.E.

L'exemple suivant montre comment créez un filtre de requête OR/AND imbriqué :

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)
    }
}
Copier après la connexion

Dans cet exemple :

  • L'opérateur $and de niveau supérieur est représenté par une tranche bson.D.
  • L'opérateur $or dans l'opérateur $and est également représenté par une tranche bson.D.
  • Chaque condition dans l'opérateur $or est représentée par un bson. Élément .D.

Il est important de noter que l'opérateur $and est la valeur par défaut, vous n'avez donc pas besoin de le spécifier explicitement. Cependant, si vous souhaitez imbriquer d'autres opérateurs dans $and, vous devrez utiliser une tranche bson.A pour représenter le tableau de conditions.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal