1

我有一个用户模型,其姓氏属性未编入索引。我希望在投影查询中使用姓氏。

class User(ndb.Model):
   firstname = ndb.StringProperty()
   lastname = ndb.StringProperty(indexed=False)
   role = ndb.StringProperty()
   activated = ndb.BooleanProperty()

由于 lastname 没有被索引,我不能将它用于投影查询。所以,我将lastname包含在我的索引中

   lastname = ndb.StringProperty()

对于投影查询(也获取姓氏),我使用以下查询:

users1 = User.query().filter(User.activated == True).order(User.firstname).fetch(limit=10, offset=10, projection=[User.firstname, User.role, User.lastname])

此查询还用于获取投影查询中的姓氏。此查询未获取任何用户列表

如果我使用以下查询(不获取姓氏):

users = User.query().filter(User.activated == True).order(User.firstname).fetch(limit=10, offset=10, projection=[User.firstname, User.role])

这似乎工作正常,并给了我预期的输出。
我认为这似乎是 gae 中的一个错误,或者更新索引是否需要很多时间(我不这么认为)。我的数据集包含大约 1024 个实体。
我在 gae http://bugtestingg.appspot.com/上创建了一个示例应用程序,它演示了行为

这是我的 index.yaml 文件

indexes:
- kind: User
  properties:
  - name: activated
  - name: firstname
  - name: role
- kind: User
  properties:
  - name: activated
  - name: firstname
  - name: lastname
  - name: role
4

1 回答 1

6

您需要 re-put() 所有已经存在的实体。

于 2013-07-22T20:13:36.983 回答