我正在尝试编写类似Twitter的微博应用程序。为此,我正在使用Google App Engine和Datatstore。
我有两节课。 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
我正在尝试使用API方法MyModelList查询TweetIndex实体,如果给定的id包含在接收器数组中,其目的是返回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(但毫不奇怪)也没有用。
我应该如何正确查询此数组?
答案 0 :(得分:2)
您需要使用pickle版本查询您的接收器阵列。鉴于PickledProperty是二进制数据,它不容易查询。你可能最好从PickledProperty更改为你真正想要的任何类型,在本例中为IntegerProperty。