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) } }
Dans cet exemple :
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!