Maison  >  Article  >  développement back-end  >  Comment construire des opérateurs logiques imbriqués dans des requêtes MongoDB avec le pilote Go ?

Comment construire des opérateurs logiques imbriqués dans des requêtes MongoDB avec le pilote Go ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-19 01:17:02728parcourir

How to Construct Nested Logical Operators in MongoDB Queries with Go Driver?

Interrogation de MongoDB avec des opérateurs logiques imbriqués

Lors de l'écriture de requêtes MongoDB complexes, il devient nécessaire d'utiliser des opérateurs logiques imbriqués tels que OR dans AND ou vice versa. Cependant, le pilote officiel MongoDB pour Go présente des défis lors de la construction de telles requêtes.

Le problème survient lorsque vous essayez de créer un filtre de requête en couches à l'aide de bson.D, qui attend des éléments bson.E. Pour obtenir une logique OR/AND imbriquée, on peut tenter d'imbriquer bson.M dans bson.D, comme le montre l'exemple suivant :

filter := bson.M{"$and": bson.D{{"p", 10}, bson.M{"$or": bson.D{{"s", 30}, {"a", 1}}}}}

Cependant, cette approche entraîne une erreur : "ne peut pas utiliser la primitive .M littéral (tapez primitive.M) comme type primitive.E dans le littéral de tranche."

L'approche correcte implique d'utiliser un tableau (bson.A) pour $or et d'omettre l'opérateur $and explicite (qui est implicite par défaut). Voici trois options valides pour créer le filtre imbriqué :

// Option 1
filter := bson.D{
    {"p", 10},
    {"$or", bson.A{
        bson.D{{"s", 30}},
        bson.D{{"a", 10}},
    }},
}

// Option 2
filter = bson.D{
    {"p", 10},
    {"$or", bson.A{
        bson.M{"s": 30},
        bson.M{"a": 10},
    }},
}

// Option 3
filter := bson.M{
    "p": 10,
    "$or": bson.A{
        bson.M{"s": 30},
        bson.M{"a": 10},
    },
}

Ces filtres représenteront correctement les expressions logiques imbriquées et pourront être utilisés pour récupérer des données d'une collection MongoDB.

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!

Déclaration:
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