如何在 Swift 中计算动态扩展的 firestore 文档?

问题描述 投票:0回答:1

如何用Swift统计firebase中设备下的device0、device1等动态增加的文档?

我尝试了下面的代码,因为如果我能找到 1,如果我按顺序查找直到找不到它,我就可以获得总数,但它不起作用。(我没有找到我尝试过的女巫,但喜欢这个)

func checkDevice3Exists() {
        let db = Firestore.firestore()

        let clientDocRef = db.collection("devices").document("device3")
                  clientDocRef.getDocument { (document, error) in
                      if let document = document, document.exists {
                          let dataDescription = document.data().map(String.init(describing:)) ?? "nil"
                          print("Document data: \(dataDescription)")
                          
                          if dataDescription.contains("\"device3\"") {
                              print ("field exists")
                          } else {
                                  print("field doesnt exist") }
                          } else {
                          print("Document does not exist")
                      }
                
    

我尝试了以下其中一项

func countDevices(completion: @escaping (Int) -> Void) {
    let db = Firestore.firestore()
    
    db.collection("devices").getDocuments { (querySnapshot, error) in
        if let error = error {
            print("Error getting documents: \(error)")
            completion(0) 
        } else {
            let deviceCount = querySnapshot?.documents.count ?? 0
            completion(deviceCount)
        }
    }
}

// i call with below code

countDevices { deviceCount in
    print("Total:  \(deviceCount)")
}
swift firebase
1个回答
0
投票

代码的固有问题是,随着集合的扩展,这

.getDocuments { (querySnapshot, error)

会返回越来越多的文档,最终导致设备超载并因数据量而崩溃。

@puf-FrankvanPuffelen 在问题评论中的链接是正确的解决方案

https://firebase.google.com/docs/firestore/query-data/aggregation-queries#swift_1

简而言之,使用计数聚合函数来检索集合的计数(来自文档):

let query = db.collection("cities")
let countQuery = query.count
do {
  let snapshot = try await countQuery.getAggregation(source: .server)
  print(snapshot.count)
} catch {
  print(error)
}

上面的 try/await 是异步工作的。

但是,如果您不想使用方便的聚合函数,另一种选择是将文档计数存储在单独的集合中。

添加/删除文档时,递增/递减计数器。然后阅读该文件以揭示计数。

© www.soinside.com 2019 - 2024. All rights reserved.