在投影查询中不会获取实体中从indexed = False更改为True

San*_*eep 1 google-app-engine python-2.7 app-engine-ndb google-cloud-datastore

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

class User(ndb.Model):
   firstname = ndb.StringProperty()
   lastname = ndb.StringProperty(indexed=False)
   role = ndb.StringProperty()
   activated = ndb.BooleanProperty()
Run Code Online (Sandbox Code Playgroud)

由于lastname未编入索引,因此无法将其用于投影查询.因此,我在索引中包含了lastname

   lastname = ndb.StringProperty()
Run Code Online (Sandbox Code Playgroud)

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

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

此查询也是为了获取投影查询中的姓氏.此查询不提取任何用户列表

如果我使用以下查询(没有提取姓氏):

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

这似乎工作正常,给了我预期的输出.
我认为这似乎是一个错误或者需要花费大量时间来更新索引(我不这么认为).我的数据集包含大约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
Run Code Online (Sandbox Code Playgroud)

Fai*_*sal 6

您需要重新放置()所有已经存在的实体.