单个属性上的NeedIndexError(Google AppEngine + Firestore)

时间:2018-05-31 23:34:14

标签: firebase google-app-engine google-cloud-platform google-cloud-firestore

我有一个Python(标准环境)应用程序,我已经上传到Google AppEngine,它使用Firestore进行存储。

以下是我的模型类的简化版本:

from google.appengine.ext import ndb

class User(ndb.Model):
    displayName = ndb.StringProperty()

    @classmethod
    def query_users(cls):
        query = cls.query().order(cls.displayName)
        db_objects = query.fetch()
        # do something with db_objects

这正如我在本地开发服务器(dev_appserver.py)中所期望的那样。

当我不使用.order(cls.displayName)调用时,我不会收到错误,但显然结果没有排序。

当我使用.order(cls.displayName)调用时,出现以下错误:

NeedIndexError: no matching index found.
The suggested index for this query is:
- kind: User
  properties:
  - name: displayName

所有(10-15个测试)用户文档都在要查询的Firestore实例中具有displayName属性。我以为Firestore为每个属性生成了一个索引?

我发现了一个略微相似的question regarding composite indexes,但我的问题更多的是关于单个属性的索引。

此外,此项目的Google云端平台(GCP)控制台中的indexes页面未显示任何索引,而是显示此文字:

To use Firestore during Beta, open the Firebase console.

Firebase控制台索引页面(https://console.firebase.google.com/project/ $ PROJECT_ID / database / firestore / indexes)没有列出,复合或其他索引。

我有一个带有复杂索引的自动生成的index.yaml文件(并没有简单的索引)。

我还有一个firestore.indexes.json文件,目前没有指定任何内容:

{
  "indexes": []
}

(我在firestore.rules文件中创建了一些数据库规则并同时创建了这个文件。)

通过阅读有关索引的Firestore文档,firestore.indexes.json文件应该用于复杂(多属性)索引,而不是单属性索引。

那么,Google AppEngine(GAE)/ Google云平台(GCP,Python标准环境)是否与Firestore索引相得益彰?

更重要的是,有没有人对如何用单一属性索引解决这个问题有任何想法?

对于后续问题,当Firestore用于数据存储时是否忽略index.yaml文件?我应该在firestore.indexes.json文件的index.yaml文件中重新创建索引并进行部署吗?

0 个答案:

没有答案