使用嵌套逻辑运算符查询 MongoDB
在编写复杂的 MongoDB 查询时,有必要使用嵌套逻辑运算符,例如 AND 中的 OR 或反之亦然。然而,Go 的官方 MongoDB 驱动程序在构建此类查询时提出了挑战。
尝试使用 bson.D 创建分层查询过滤器时会出现问题,该过滤器需要 bson.E 元素。为了实现嵌套的 OR/AND 逻辑,人们可能会尝试将 bson.M 嵌套在 bson.D 中,如下例所示:
filter := bson.M{"$and": bson.D{{"p", 10}, bson.M{"$or": bson.D{{"s", 30}, {"a", 1}}}}}
但是,这种方法会导致错误:“cannot use Primitive” .M 文字(原始类型.M)作为切片文字中的原始类型.E。”
正确的方法是使用数组 (bson.A) 来表示 $or 并省略显式的 $and 运算符(即默认情况下暗示)。以下是创建嵌套过滤器的三个有效选项:
// 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}, }, }
这些过滤器将正确表示嵌套逻辑表达式,并可用于从 MongoDB 集合检索数据。
以上是如何使用 Go 驱动程序在 MongoDB 查询中构造嵌套逻辑运算符?的详细内容。更多信息请关注PHP中文网其他相关文章!