一尘不染

Golang-具有[]字节比较的Appengine数据存储区过滤器查询

go

我正在尝试对数据存储区中的一组实体执行过滤器查询,但是我要使用相等运算符查询的实体字段的类型为[]
byte,我不知道appengine数据存储区是否可以执行这个比较

这是我的实体:

type Data struct {
 Id          int64  `json:"id"`
 Version     int32  `json:"-"`
 HMAC        []byte `json:"-"`
 Status      string `json:"status"`
}

这是我的查询逻辑

func (view *DataView) GetDataByHMAC(hmac []byte) (Data, error) {
    view_key := datastore.NewKey(view.context, "View", "data-view", 0, nil)
    data := make([]Data, 0)
    query := datastore.
       NewQuery("ViewData").
       Ancestor(view_key).
       Filter("HMAC = ", hmac)
    _, err := query.GetAll(view.context, &data)
    if err != nil {
       return Data{}, err
    }
    if len(data) == 0 {
       return Data{}, ErrNoData
    }
    return data[0], nil
}

它可以构建但不会返回任何结果,即使经过10秒钟以编程方式重试后也是如此,因此我认为这不是数据存储与我存储在其中的视图数据之间最终一致性的问题。

我的主要问题是:appengine数据存储区是否允许查询对类型为[] byte的字段使用比较过滤器?


阅读 168

收藏
2020-07-02

共1个答案

一尘不染

您的主要问题的答案是“否”,因为[] byte存储为blob,但App Engine数据存储区未对其进行索引。

queries with a filter or sort order on the unindexed property 
will never match that entity.
Note: In addition to any unindexed properties you declare explicitly, 
those typed as []byte are automatically treated as unindexed.

以下是文档:https
:
//developers.google.com/appengine/docs/go/datastore/indexes#Go_Unindexed_properties

2020-07-02