【问题标题】:Querying a PickleProperty in NDB在 NDB 中查询 PickleProperty
【发布时间】:2017-12-14 10:33:38
【问题描述】:

我正在尝试编写一个类似 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(但并不奇怪)也没有工作。

我应该如何正确查询这个数组?

【问题讨论】:

    标签: google-app-engine google-cloud-datastore app-engine-ndb endpoints-proto-datastore


    【解决方案1】:

    您需要使用腌制版本查询您的接收器数组。鉴于 PickledProperty 是二进制数据,查询起来并不容易。您最好从 PickledProperty 更改为您真正想要的任何类型,在本例中为 IntegerProperty。

    【讨论】:

      猜你喜欢
      • 2017-01-20
      • 2013-06-21
      • 1970-01-01
      • 1970-01-01
      • 2014-10-08
      • 2012-09-25
      • 1970-01-01
      • 1970-01-01
      • 2020-10-20
      相关资源
      最近更新 更多