2014-10-24 5 views
1

내 경로에 고릴라 멀티플렉서를 사용하고 있으며 ID를 전달합니다.id로 개체 가져 오기

해당 ID를 사용하면 어떻게 데이터 저장소에서 엔티티를 가져올 수 있습니까?

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

그리고 여기 저는 막혔습니다. 필터를 사용해 보았지만 작동하지 않습니다.

다음에해야 할 일은 무엇입니까?

+0

SQL과 같은 데이터 모델링 언어의 이전 경험과 혼동을 느낄 수 있습니다. 데이터 저장소 키는 엔티티의 _properties_와 완전히 별개로 ** 있다는 점에서 _ _ 데이터 키 _는 SQL_primary 키 column_과 동일한 것이 아닙니다. 검색어는 엔티티 속성에 대해서만 이야기해야합니다. 반대로 SQL 기본 키 열은 여전히 ​​열입니다. 데이터 저장소 키가 있다면'datastore.Get' 또는'datastore.GetMulti' 함수를 사용하십시오. 검색어가 필요하지 않습니다. – dyoo

답변

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을 참조하십시오.

+0

'key : = datastore.NewKey (c, "Item", "", n, defaultItemList (c))'데이타베이스를 사용했습니다 :'invalid entity type' – RockNinja

+1

전달할 포인터의 값은 무엇입니까? 데이터 저장소로 이동하십시오. https://groups.google.com/forum/#!topic/golang-nuts/TfL11t8YX-4에 언급 된 실수를하지 않았 음을 다른 사람들이 알 수 있도록 충분한 소스 코드를 작성하지 않았습니다. ErrInvalidEntityType은 https://cloud.google.com/appengine/docs/go/datastore/reference에 문서화되어 있으므로 코드가'datastore.Get'에 예기치 않은 대상 값을 전달해야합니다. – dyoo

+1

예를 들어'item : = [] Item {}'을 실행했고'datastore.Get (c, key, item) '을 호출하려고한다면 확실히 실패합니다 :'item'은 실패합니다 struct 포인터. 당신은'item : = Item {}'을 할 필요가 있고'datastore.Get (c, key, & item)'는 효과가 있어야합니다. – dyoo