我有一个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文件中重新创建索引并进行部署吗?