根据golang中的struct值搜索记录

时间:2018-01-06 04:27:23

标签: google-app-engine go datastore

我正在为搜索功能编写服务。当我在正文中传递值来获取特定记录时,我只能根据PHONE的结构值获取它。

我是golang的新手。

我需要使用结构中的所有字段来搜索值,用于ex.phone或者患者结构的名字或姓氏

我的结构如下

type PatientEntity struct {
    ID        int64 
    FirstName string 
    LastName  string 
    Phone     string 
}

我的代码是

func SearchPatientsHandler(res http.ResponseWriter, req *http.Request) {
    patient := &PatientEntity{}
    if err := json.NewDecoder(req.Body).Decode(patient); err != nil {
        panic(err)
    }

    patients := []*PatientEntity{}  
    q := datastore.NewQuery(KINDPATIENT).Filter("FirstName =",patient.FirstName) 

    keys, err := q.GetAll(ctx, &patients)

    if err != nil {
        // Handle error
        return
    }

    json.NewEncoder(res).Encode(patients)
}

我需要搜索struct的所有值。我可以解决。

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您可以尝试将过滤器与OR结合使用。根据{{​​3}},这是不可能的:

  

Cloud Datastore目前仅支持组合过滤器   与AND运算符。

这有一个the docs,但它已经存在了很长时间没有采取行动。

您可以为每个过滤器发出单独的查询,然后合并结果(查询名字,然后查询姓氏,然后查询电话。最后:结合所有返回结果,同时删除重复项。)

某些事情(伪代码,但这是OR搜索的逻辑):

var results []Patients
if firstname != "" {
  results = append(results, query("firstname = ", firstname)
}
if lastname != "" {
  results = append(results, query("lastname = ", lastname)
}
etc...
removeDuplicates(results)