go mongo-driver动态条件

  • 分类:【MongoDd
  • 浏览【34】
  • 评论【0】
  • 更新【2020-6-19 15:57:09】

在go mongo中查询是使用的是bson.M类型的条件,但是直接使用时无法动态添加条件,只能初始化赋值,bson.M其实就是map类型,只能使用someMap["someKey"]="someValue" 的形式添加,这样的话只能是用if判断字段的值来决定是否添加map key/value,写起来比较繁琐。还有一种是利用结构体转换为bson.M来实现。

//构造一个条件变量
	condition := bson.M{}
	//将结构体转为字节数组,userInfo中的字段根据需要设置值,需要保证没有值时不会有默认值出现
	userbyte, err := bson.Marshal(userInfo)
	if err != nil {
		return user, err
	}
	//将字节码转为bson.M类型
	bson.Unmarshal(userbyte, &condition)
	log.Println(condition)
	if err = this.mongo.Collection("user").FindOne(context.TODO(),
		condition).Decode(&user); err != nil {
		return user, err
	}