按ID获取实体

时间:2014-10-24 21:47:53

标签: google-app-engine go

我正在使用gorilla mux作为我的路线,我传了一个id。

使用该ID如何从数据存储中获取实体。

param := mux.Vars(r)
c := appengine.NewContext(r)
item := []Item{}
pr, err := datastore.NewQuery("Item").Filter("ID = ", param["id"]).GetAll(c, &item)

在这里我被卡住了,我尝试使用过滤器,但它不起作用。

我接下来要做什么?

2 个答案:

答案 0 :(得分:3)

如果您有ID,则不需要使用查询。更快,更便宜的方法是创建密钥并直接从数据存储区检索此实体。

https://cloud.google.com/appengine/docs/go/datastore/entities#Go_Retrieving_an_entity

答案 1 :(得分:2)

如果您对实体使用整数或字符串ID,则不要说。我假设整数,因为它需要更多的代码。首先,创建一个密钥:

 n, err := strconv.ParseInt(param["id"], 10, 64)
 if err != nil {
    // handle error
 }
 key := datastore.NewKey(c, "Item", "", n, nil)

现在你有了密钥,你可以获取实体:

 var item Item
 if err := datastore.Get(c, key, &item); err != nil {
     // handle error
 }

实体get比查询实体更有效。如果您确实想按ID查询,请参阅App Engine文档中的key filters