如何根据golang中查询字符串中输入的数据获取数据?

时间:2018-04-04 09:46:16

标签: mongodb go mgo

我在mongodb中检索集合中的数据与使用golang在查询字符串中输入的数据匹配。

有两种情况

案例1

假设用户是否搜索单个字段,例如first_namelast_name等。然后点击网址http://localhost:8080/api/v1/customer?keyword=puneet

来检索数据

案例2

如果情况2假设我们在mongodb集合中有两个字段,例如first_name : puneetlast_name : jindal等。如果用户将在查询字符串first_namelast_name

中输入两个字段

示例点击http://localhost:8080/api/v1/customer?keyword=puneet%20kumar之类的网址,然后没有数据检索。

我为此尝试了以下代码。但没有成功

这个结构是:

type Customer struct {
  Id          int    `json:"id" bson:"_id"`
  Name        string `json:"name" bson:"name"`
  FirstName   string `json:"first_name" bson:"first_name"`
  LastName    string `json:"last_name" bson:"last_name"`
  Email       string `json:"email" bson:"email"`
  PhoneNumber string `json:"phone_number" bson:"phone_number"`
}

检索数据的功能:

func GetCustomers(c *gin.Context) {
value:= c.Query("keyword")
fmt.Println(value)
response := ResponseControllerList{}
conditions := bson.M{"$or": []bson.M{
    bson.M{"first_name": bson.RegEx{".*" + value, "i"}},
    bson.M{"last_name": bson.RegEx{".*" + value, "i"}},
    bson.M{"email": bson.RegEx{".*" + value, "i"}},
    bson.M{"phone_number": bson.RegEx{".*" + value, "i"}},
}}
data, err := models.GetCustomerListing(conditions)
if err != nil {
    response = ResponseControllerList{
        config.FailureCode,
        config.FailureFlag,
        config.FailureMsg,
        nil,
        nil,
    }
} else {
    response = ResponseControllerList{
        config.SuccessFlag,
        config.SuccessFlag,
        config.SuccessMsg,
        data,
        nil,
    }
}
GetResponseList(c, response)
}

1 个答案:

答案 0 :(得分:0)

我做了解决方案

value:= c.Query("keyword")
fmt.Println(value)
response := ResponseControllerList{}
name := strings.Replace(value, " ", "|", -1)
conditions := bson.M{"$or": []bson.M{
    bson.M{"first_name":bson.RegEx{"(?i).*"+name+".*", "i"} },
    bson.M{"last_name": bson.RegEx{ "(?i).*"+name+".*", "i"} },
    bson.M{"email": bson.RegEx{".*" + value, "i"}},
    bson.M{"phone_number": bson.RegEx{".*" + value, "i"}},
}}

更改查询