首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mongo-go-driver:嵌套OR/AND查询过滤器

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

Stack Overflow用户
提问于 2020-04-01 18:55:00
回答 1查看 1.5K关注 0票数 2

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

代码语言:javascript
复制
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驱动中创建这样的嵌套查询?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-01 19:55:01

重要的是,$or需要一个数组,即bson.A。而且$and是默认的,你不需要指明。

您的筛选器可以定义为:

代码语言:javascript
复制
filter := bson.D{
    {"p", 10},
    {"$or", bson.A{
        bson.D{{"s", 30}},
        bson.D{{"a", 10}},
    }},
}

您还可以使用以下命令:

代码语言:javascript
复制
filter = bson.D{
    {"p", 10},
    {"$or", bson.A{
        bson.M{"s": 30},
        bson.M{"a": 10},
    }},
}

或者这样:

代码语言:javascript
复制
filter := bson.M{
    "p": 10,
    "$or": bson.A{
        bson.M{"s": 30},
        bson.M{"a": 10},
    },
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60969262

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档