mongo-go-driver:嵌套 OR/AND 查询过滤器

Ale*_*xey 3 go mongodb mongo-go

我尝试使用嵌套运算符(OR/AND/...)创建 MongoDB 查询过滤器。但 lib 需要创建 abson.D并向bson.E其中传递元素。如果我需要放在OR/AND里面AND/OR- 我需要像这样放在bson.M + bson.D里面:bson.D

filter := bson.M{"$and": bson.D{{"p", 10}, bson.M{"$or": bson.D{{"s", 30}, {"a", 1}}}}}
Run Code Online (Sandbox Code Playgroud)

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

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

icz*_*cza 6

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

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

filter := bson.D{
    {"p", 10},
    {"$or", bson.A{
        bson.D{{"s", 30}},
        bson.D{{"a", 10}},
    }},
}
Run Code Online (Sandbox Code Playgroud)

您也可以使用这个:

filter = bson.D{
    {"p", 10},
    {"$or", bson.A{
        bson.M{"s": 30},
        bson.M{"a": 10},
    }},
}
Run Code Online (Sandbox Code Playgroud)

或这个:

filter := bson.M{
    "p": 10,
    "$or": bson.A{
        bson.M{"s": 30},
        bson.M{"a": 10},
    },
}
Run Code Online (Sandbox Code Playgroud)