google-app-engine - how - google app engine gae
Golang-Consulta de filtro de almacén de datos de Appengine con comparación de bytes de (2)
Intento realizar una consulta de filtro en un conjunto de entidades en el almacén de datos, pero el campo de entidad con el operador de igualdad que intento consultar, es de tipo [] byte y no sé si el almacén de datos appengine puede realizar esta comparación
Esta es mi entidad:
type Data struct {
Id int64 `json:"id"`
Version int32 `json:"-"`
HMAC []byte `json:"-"`
Status string `json:"status"`
}
Y aquí está mi lógica de consulta
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
}
Construye pero no devuelve ningún resultado, incluso después de reintentarlo programáticamente en el transcurso de 10 segundos, por lo que no creo que sea un problema de consistencia entre el almacén de datos y los datos de vista que he almacenado allí.
Mi pregunta principal es: ¿el almacén de datos appengine permite una consulta para usar un filtro de comparación en un campo con tipo [] byte?
En 1.9.11, el tipo ByteString
se introdujo en el paquete del almacén de datos. Se puede usar para almacenar segmentos de bytes cortos e indexados.
Si cambia su entidad a lo siguiente, debería funcionar:
type Data struct {
ID int64 `json:"id"`
Version int32 `json:"-"`
HMAC datastore.ByteString `json:"-"`
Status string `json:"status"`
}
Más información: https://developers.google.com/appengine/docs/go/datastore/entities#Go_Properties_and_value_types
La respuesta a su pregunta principal es No, porque el byte [] se almacena como blob, que no está indexado por el datastore del motor de la aplicación.
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.
Aquí está la documentación: https://developers.google.com/appengine/docs/go/datastore/indexes#Go_Unindexed_properties