我有一个已部署的GAE应用,我注意到我有这个简单的查询:
MBObject.query(MBObject.groupId == group.id).fetch()
groupId
是ndb.StringProperty(indexed=True)
在我的GAE信息中心(在appengine.google.com上)查看我的index.yaml文件甚至数据存储索引时,未列出此属性的索引。这通常意味着我在上传之前没有在开发模式下测试整个应用程序,所以我必须手动插入索引。
但是,查询工作得很好。它返回我想成功的所有对象。我想知道这是怎么回事?为什么即使通过groupId进行查询也没有列在我的index.yaml和仪表板中?不应该引起一些错误吗?
答案 0 :(得分:5)
GAE会自动为所有实体编制索引,并且您的查询不需要index.yaml
中的特定索引定义,因为您只查询一个属性(即使您要查询多个属性,它也不会创建任何属性)。
如果您要通过date
属性订购此查询,则可以在index.yaml
中创建索引定义,如果您要在SDK中运行它,或者您可以手动编写它们。
来自docs:
应用程序发出的每个数据存储区查询都需要相应的查询 指数。简单查询的索引,例如单个查询 属性,是自动创建的。复杂查询的索引必须 在名为index.yaml的配置文件中定义。这个文件是 与应用程序一起上载以在数据存储区中创建索引。