登录
首页 >  Golang >  Go问答

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

来源:Golang技术栈

时间:2023-03-26 18:04:52 117浏览 收藏

欢迎各位小伙伴来到golang学习网,相聚于此都是缘哈哈哈!今天我给大家带来《mongo-go-driver:嵌套的 OR/AND 查询过滤器》,这篇文章主要讲到golang等等知识,如果你对Golang相关的知识非常感兴趣或者正在自学,都可以关注我,我会持续更新相关文章!当然,有什么建议也欢迎在评论留言提出!一起学习!

问题内容

我尝试使用嵌套运算符 (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}}}}}

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

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

正确答案

重要的是$or需要一个数组,即[bson.A](https://godoc.org/go.mongodb.org/mongo- driver/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},
    },
}

理论要掌握,实操不能落!以上关于《mongo-go-driver:嵌套的 OR/AND 查询过滤器》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>