我正在使用 Go 和 Google Datastore 在 Google App Engine 中构建目录应用程序。我正在使用数据存储的Ancestor
功能来管理不同的产品类别。以下是一些数据的示例:
Musical Instruments -> Guitars -> Gibson -> Les Paul
Musical Instruments -> Guitars -> Fender -> Stratocaster
Musical Instruments -> Bass Guitars -> Music Man -> Stingray
乐器是根实体。当我点击它时,我希望看到Guitars
和Bass Guitars
,但我看到的是所有东西都是Musical Instruments
最后一个实体的后代。这不是我要找的。在这一点上,我只对乐器的直系后代感兴趣。
一些帖子,比如这个帖子,建议在数据存储中创建一个字段来跟踪直接父母。但是,如果我要手动跟踪父实体,为什么要使用这些Ancestor
功能呢?它会比过滤匹配直接父字段的查询更快吗?
这是获取类别的方法:
func (cat *Category) GetCategories(r *http.Request, pk string) ([]CategoryReturn, error) {
//get context
c := appengine.NewContext(r)
var q *datastore.Query
var err error
//get parent key
k, err := datastore.DecodeKey(pk)
if err != nil {
//handle error
return []CategoryReturn{}, err
}
q = datastore.NewQuery("Category").Ancestor(k)
//populate category slices
var categories []CategoryReturn
keys, err := q.GetAll(c, &categories)
if err != nil {
//handle error
return []CategoryReturn{}, err
}
//create return object
results := make([]CategoryReturn, 0, 20)
for i, r := range categories {
k := keys[i]
y := CategoryReturn {
Name: r.Name,
Id: k.IntID(),
Key: k.Encode(),
}
results = append(results, y)
}
return results, nil
}
慕容3067478
相关分类