2014-09-14 2 views
5

데이터 저장소에있는 엔티티 집합에 대해 필터 쿼리를 수행하려고하지만 같음 연산자를 사용하여 쿼리하려고하는 엔티티 필드가 유형입니다 여기Golang - [] 바이트 비교를 사용하는 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 데이터 저장소가 [] 바이트 유형의 필드에서 비교 필터를 사용하는 쿼리를 허용합니까?

+0

문제는 무엇입니까? – OneOfOne

+1

죄송합니다. 지금은 분명히했습니다. – InternetProfessionalPersonHere

+0

필터 문자열'HMAC = "'에서 후행 공백을 제거하고 어떤 일이 일어나는지 확인하기 전에 언제든지 보냅니다. – AndrewN

답변

4

ByteString 유형이 데이터 저장소 패키지에 도입 : 여기

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. 

는 문서입니다. 짧은 인덱싱 된 바이트 조각을 저장하는 데 사용할 수 있습니다. 당신이 다음에 엔티티를 변경하는 경우

, 그것을 작동합니다 :

type Data struct { 
    ID  int64    `json:"id"` 
    Version int32    `json:"-"` 
    HMAC datastore.ByteString `json:"-"` 
    Status string    `json:"status"` 
} 

상세 정보 : https://developers.google.com/appengine/docs/go/datastore/entities#Go_Properties_and_value_types

관련 문제