我正在为搜索功能编写服务。当我在正文中传递值来获取特定记录时,我只能根据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的所有值。我可以解决。
答案 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)