0

트위터와 같은 마이크로 블로깅 애플리케이션을 코딩하려고합니다. 이를 위해 Google App Engine과 Datatstore를 사용하고 있습니다.NDB의 PickleProperty 쿼리

두 클래스가 있습니다. 부모 인 Tweet 클래스 :

class Tweet(EndpointsModel): 

    _message_fields_schema = ('sender','body', 'name') 

    sender = ndb.StringProperty() 
    body = ndb.TextProperty() 
    created = ndb.DateTimeProperty(auto_now=True) 
    ... 

트윗의 모든 수신자를 포함하는 TweetIndex 클래스입니다.

class TweetIndex(EndpointsModel): 
    ... 
    receivers = ndb.PickleProperty(indexed=True,repeated=True) 
    created = ndb.DateTimeProperty(auto_now=True) 
    ... 

@TweetIndex.method(request_fields=('receivers',), 
        path='mymodels', name='mymodel.list') 
def MyModelList(self, query): 
if not query.from_datastore: 
    raise endpoints.NotFoundException('MyModel not found.') 
return query 

나는 목적은 주어진 ID가 수신기 배열에 포함되어있는 경우 TweetIndex 개체를 반환하는 것입니다 API 방법 MyModelList와 TweetIndex 엔티티를 조회하기 위해 노력하고있어. 수신기 어레이

예 :

데이터 스토어에서 같은 것을 보인다
["13911772075915175317","1855429131779793831", ... ] 

(BLOB으로 저장된) : 그러나

["gAJYEwAAADY1NjU2NDM3MzA1NDI2NDU5ODlxAS4=","gAJYEwAAADU4MDM3MjE4OTEyNDgzNzgyNjNxAS4=",...] 

다음 API 요청을 실행할 때

POST https://myapi/.../v1/mymodels 

{ 
"receivers": [ 
    "13911772075915175317" 
] 
} 

다음과 같이 반환됩니다.

404 

- Show headers - 

{ 
"error": { 
    "errors": [ 
    { 
    "domain": "global", 
    "reason": "notFound", 
    "message": "MyModel not found." 
    } 
    ], 
    "code": 404, 
    "message": "MyModel not found." 
} 
} 

"13911772075915175317"은 수신기 배열에 적어도 한 번 존재합니다. 요청에 BLOB를 입력하려고 시도했지만 (놀라움도 없음) 중 하나가 작동하지 않았습니다.

이 배열을 올바르게 쿼리하려면 어떻게해야합니까?

답변

2

절인 버전으로 수신기 배열을 쿼리해야합니다. PickledProperty가 2 진 데이터라는 점을 감안할 때 조회하기 쉽지는 않습니다. PickledProperty에서 원하는 유형 (이 경우 IntegerProperty)으로 변경하는 것이 좋습니다.

관련 문제