我在Firestore开发数据库上设置了多个不同的索引。现在,我想将它们导出到firestore.indexes.json
中,以便更轻松地设置产品环境。有没有办法使用Firebase CLI导出这些索引?安全规则也是如此,尽管我知道我可以复制粘贴它们。
答案 0 :(得分:11)
有可能!
从Firebase项目文件夹中的CLI firebase firestore:indexes
运行。
如果您已经设置了索引并通过CLI登录到Firebase,您将获得格式化的JSON输出供您复制。
示例:
{
"indexes": [
{
"collectionId": "teslaData",
"fields": [
{
"fieldPath": "Model",
"mode": "ASCENDING"
},
{
"fieldPath": "Price",
"mode": "ASCENDING"
}
]
}
]
}
我正在使用Firebase CLI 4.2.1
,如果有帮助,祝您好运:)
答案 1 :(得分:2)
我认为目前没有用于从项目中获取Firestore安全规则的API。您可以deploy rules through the CLI,也可以将其嵌入自定义节点脚本中,并从CI流程中调用。但是据我所知,没有API可以从项目中读取规则。
听起来file a feature request是一个很好的理由。
答案 2 :(得分:0)
如果接受的答案对 Firestore 索引不起作用(我遇到了权限错误),您可以转到 Firebase 控制台 > Cloud Firestore > 索引,然后在检查器中打开网络选项卡,清除所有请求并刷新这一页。页面加载后,您可以在网络请求的 XHR 过滤器中找到索引的 JSON 格式响应(我通过在网络选项卡的搜索栏中搜索“索引”一词找到了我的)。它应该看起来像 'indexes?key=...' 你可以复制这个 JSON 响应。
如果您已经使用 firebase init
在您的项目中初始化了 firebase,您只需将其粘贴到您项目的 firestore.indexes.json 文件中即可。
然后将每个 name 属性更改为 collectionGroup 属性。例如:'name': 'projects/[your project name]...'
到 'collectionGroup': '[name of collection for this index]'
运行 firebase deploy --only firestore:indexes
将在文本编辑器中所做的任何更改更新回 Firestore 索引选项卡
对于 Firestore 安全规则,以一种不太复杂但类似的方式,您可以将 firebase 控制台中显示的规则复制并粘贴到您项目的 firestore.rules 文件中。
示例 firestore.indexes.json
文件
{
"indexes": [
{
"collectionGroup": "faq",
"queryScope": "COLLECTION",
"fields": [
{
"fieldPath": "searchKeywords",
"arrayConfig": "CONTAINS"
},
{
"fieldPath": "answered",
"order": "ASCENDING"
},
{
"fieldPath": "relevanceScore",
"order": "ASCENDING"
},
{
"fieldPath": "__name__",
"order": "ASCENDING"
}
]
}
]
}
答案 3 :(得分:-1)
任何集成开发环境都基于支持Node.js的操作系统(Firebase CLI要求)。因此,如果您查看Nodes Filesystem文档,就会有一些示例,说明如何以编程方式(通过JavaScript)操作(复制/粘贴)文件。至于以编程方式部署到Firebase,请参见child_process.spawn