为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
富国沪深 2022-05-23 17:15:06
我尝试使用嵌套运算符 (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 驱动程序中创建这样的嵌套查询?
查看完整描述

1 回答

?
繁星淼淼

TA贡献1775条经验 获得超11个赞

重要的是$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},

    },

}


查看完整回答
反对 回复 2022-05-23
  • 1 回答
  • 0 关注
  • 337 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信