【问题标题】:mongo-go-driver: nested OR/AND query filtermongo-go-driver:嵌套的 OR/AND 查询过滤器
【发布时间】:2020-04-01 10:55:00
【问题描述】:

我尝试使用嵌套运算符 (OR/AND/...) 创建 MongoDB 查询过滤器。但是 lib 需要创建一个 bson.D 并将 bson.E 元素传递给它。如果我需要在AND/OR 中添加OR/AND - 我需要将bson.M + bson.D 放入bson.D 中,如下所示:

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

.. 当然它不起作用:cannot use primitive.M literal (type primitive.M) as type primitive.E in slice literal。如果稍后我尝试在bson.D 中使用... in [] 逻辑,可能会发生同样的问题

如何在 Go 和官方 MongoDB 驱动程序中创建这样的嵌套查询?

【问题讨论】:

    标签: mongodb go mongo-go


    【解决方案1】:

    重要的是$or 需要一个数组,即bson.A$and 也是默认值,您不必指明。

    您的过滤器可以这样定义:

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

    你也可以使用这个:

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

    或者这个:

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

    【讨论】:

      猜你喜欢
      • 2014-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-08
      • 1970-01-01
      • 2017-06-19
      • 1970-01-01
      相关资源
      最近更新 更多