google-app-engine - 无法使用golang从数据存储中获取基于结构值的记录

标签 google-app-engine go google-cloud-datastore datastore

我正在为搜索功能编写服务。当我在正文中传递值以获取特定记录时,我无法根据结构值获取它。 例如:电话号码或用户名

编辑1:

type PatientData struct {
    ID            int64    datastore:"-"
    FirstName     string   json:"firstname,omitempty"
    LastName      string   json:"lastname,omitempty"
    UserName      string   json:"username,omitempty"
    Phone         string   json:"phone,omitempty"     
}

我想获取基于用户名或电话的完整结构值。下面是我的代码:

func searchValue (res http.ResponseWriter, req *http.Request){

    log.Printf("%#v Getting values url - x ", "called search")

    patient := &PatientData{}
    if err := json.NewDecoder(req.Body).Decode(patient); err != nil {
        panic(err)
    }
    ctx := appengine.NewContext(req)
    ctx, err := appengine.Namespace(ctx, NAMESPACENAME)
    if err != nil {
        panic(err)
    }

    m := patient.Phone
    i, err := strconv.ParseInt(m, 10, 64)
    log.Printf("%#v Getting values m ", m)
    log.Printf("%#v Getting values url -yyy ",i)

    key := datastore.NewKey(ctx, "Patient","" , i, nil)
    log.Printf("%#v Getting values url - key ", key)
    err = datastore.Get(ctx, key, patient)
    if err := json.NewEncoder(res).Encode(patient); err != nil {
        panic(err)
    }

}

当我在我的 Newkey 中传递 PHONE 时,我无法生成基于 PHONE 的值

我不想在 put 功能中使用 Newkey 来生成键名,并且我不想基于该 KEYNAME 获取值。

最佳答案

datastore.Get()只能用于通过其 key 从数据存储中获取实体,因此其 key 必须已知/存在。

这显然不是您想要做的。您正在尝试通过不是键的属性获取实体。为此,您需要运行一个查询

数据存储查询由 datastore.Query 表示类型。您需要创建一个查询并为其设置过滤器。在您的情况下,您想按用户名和/或电话属性进行过滤。

这就是它的样子。获取通过电话过滤的患者实体:

q :=  datastore.NewQuery("Patient").Filter("phone =", patient.Phone)

var patients []*Patient
keys, err := q.GetAll(ctx, &patients)
if err != nil {
    // Handle error
    return
}

// patients contains patients with the given phone number

获取按电话号码和用户名过滤的患者的示例:

q :=  datastore.NewQuery("Patient").
    Filter("phone =", patient.Phone).
    Filter("username =", patient.UserName)

var patients []*Patient
keys, err := q.GetAll(ctx, &patients)
if err != nil {
    // Handle error
    return
}

// patients contains patients with the given phone number and username

关于google-app-engine - 无法使用golang从数据存储中获取基于结构值的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47883783/

相关文章:

java - 是否可以使用 appengine 模块和云端点?

python - 断言错误 : No api proxy found for service "urlfetch"

python - 应用引擎 : Maintaining DataStore Consistency When Creating Records

go - 有没有办法使用 atomic.AddUint64 重置计数器递增?

function - golang返回多个值问题

google-app-engine - 创建数据存储的成本。 key : Storing a key in struct versus an id and fetching from the datastore

google-app-engine - 有没有办法通过 Google Datastore 事件触发 Google Cloud Function?

google-app-engine - 开发者控制台中自定义域的 App Engine SSL(不是通过 Google Apps)

Python POST 请求直到在谷歌应用引擎上等待超时时间后才发送请求

go - 这个简单的脚本有什么问题?