Maison > développement back-end > Golang > 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
Libérer: 2024-11-19 01:17:02
original
787 Les gens l'ont consulté

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

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

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!

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