在firestore索引中自动添加索引

时间:2018-01-17 15:57:18

标签: ios swift firebase indexing google-cloud-firestore

我可以自动 firestore index 中添加索引吗?

我的应用为显示结果制作请求过滤器引用 firestore 。但是,如果 firestore无法显示结果,在控制台中,我会看到链接 firestore 以获取添加索引。因此,如果我推送 Safari 中的链接,我会看到我的 firestore如何添加索引

我可以在应用中的后台工作中添加此索引,这样我就可以继续使用该应用,而无需转到Safari?

将来中,以便每个错误对象自动添加时。

我在 firestore

中表示索引

enter image description here

错误链接示例:

Error download results: Error Domain=FIRFirestoreErrorDomain Code=9 "The query requires an index. You can create it here: https://console.firebase.google.com/project/*********/database/firestore/indexes?create_index=EgxQaG90b1N0dWRpb3MaEQoNcmV0cm9JbnRlcmlvchACGgkKBXByaWNlEAIaDAoIX19uYW1lX18QAg" UserInfo={NSLocalizedDescription=The query requires an index. You can create it here: https://console.firebase.google.com/project/*********/database/firestore/indexes?create_index=EgxQaG90b1N0dWRpb3MaEQoNcmV0cm9JbnRlcmlvchACGgkKBXByaWNlEAIaDAoIX19uYW1lX18QAg}

我使用的代码:

fileprivate func observeQuery() {

    guard let query = query else { return }

    stopObserving()

    setLoadingScreen() 

    listener = query.addSnapshotListener { [unowned self] (snapshot, error) in

        if let snapshot = snapshot {

            DispatchQueue.main.asyncAfter(deadline: time) {

                let hallModels = snapshot.documents.map { (document) -> Halls in

                    if let hallModel = Halls(dictionary: document.data()) {

                        return hallModel

                    } else {

                        fatalError("Error!")

                    }
                }

                self.halls = hallModels

                self.document = snapshot.documents

                self.removeLoadingScreen()

                self.tableView.reloadData()

            }

        } else {
            // firestore can't display result and i get an error with link
            print("Error download results: \(error!)")

            self.tableView.separatorStyle = .none

            self.tableView.reloadData()

        }
    }
}

在这一行我得到一个错误。我认为在这一行中需要编写代码,如果可能,但我不知道该怎么做。:(

        } else {
            // firestore can't display result and i get error with link
            print("Error download results: \(error!)")

            self.tableView.separatorStyle = .none

            self.tableView.reloadData()

        }

firestore 添加索引后,我停止了错误链接

2 个答案:

答案 0 :(得分:2)

没有一种以这种方式以编程方式创建复合索引的方法,您可能不会想要。在测试代​​码时,这应该是开发流程的一部分,以确定是否需要任何复合索引来处理更复杂的查询。

幸运的是,只需要为您添加的新查询执行一次。

答案 1 :(得分:0)

有一种方法可以使用CLI自动进行索引部署(可能在您的CI / CD中或预先在索引中,因此它们有机会在部署需要它们的应用程序版本之前为所有文档建立索引)。

在项目(即N)中初始化Firestore时,将创建一个firebase init firestore文件。在那里,您可以添加所有复合索引,并使用以下命令进行部署:firestore.indexes.json

以下是文档的链接:https://firebase.google.com/docs/firestore/query-data/indexing