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!