想要获取像realTimeDatabase这样的firestore

uwa*_*lla 5 algorithm firebase swift firebase-realtime-database google-cloud-firestore

Firestore中有什么方法可以获取单个数组中的数据列表,例如..在RealTimeDatabase中,我们通过调用单个值而不是使用ForEachLoop来获取Data数组...例如,在realtimeDatabase中,我们通过以下方式获取值:

var PersonObjArrays  : [Person] = [ ] () 

  Database.database().
  reference.child("personFullname").observe( .childAdded.  
   , with : { (snapshot) in 

 let snapShotValue = snapshot.value

 let firstname = snapShotValue["firstname"] as! String
 let lastname = snapShotValue["lastname"] as! String

 let personObj = Person( firstname ,lastname)

 self.messageArray.append(personObj)
Run Code Online (Sandbox Code Playgroud)

但是在Firestore中,我们必须使用ForLoop .....例如,在Firestore中,我们使用了

 FireStore.firestore()
  .collection("personFullname").
   getDocuments { (snapshot , error ) in 

          for document in snaphot.document {      

                 let data = document.data( )
                 let firstName = data["firstname"] as! String
                 let lastnamNname = data["lastname"] as! String

                let personObj2 = Person( firstName , lastName)
               self.messageArray.append(personObj2)
 }
Run Code Online (Sandbox Code Playgroud)

那么有什么方法可以将Firestore的数据作为整个ObjectArray获取

Fra*_*len 2

Firebase 实时数据库始终返回一个DataSnapshot. 即使结果保证是一个列表,您也会返回 a DataSnapshot,其中每个子节点都是该列表中的一个元素。

Cloud Firestore 对于单个结果与结果列表返回不同的类型。对于单个结果,Firestore 返回 aDocumentSnapshot或 a QueryDocumentSnapshot,这允许您获取单个文档的值(和元数据)。对于查询或集合,Firestore 返回一个QuerySnapshot,其中包含/对象的列表DocumentSnapshotQueryDocumentSnapshot

无法.childAdded从 Cloud Firestore 请求等效项。这是 API 设计者有意进行的更改,因为许多开发人员混淆了 aDataSnapshot可能在结果中扮演的两个角色。

用 RTDB 术语来说,Firestore 始终会触发.value事件,并且您必须循环遍历结果。如果您循环QuerySnapshot.docChanges仅检查type= ,addedQueryDocumentSnapshot.status您将获得与实时数据库的.childAdded.


因此,相当于您的.childAdded听众的内容如下:

FireStore.firestore()
  .collection("personFullname")
  .getDocuments { (snapshot , error ) in 
    guard let snapshot = querySnapshot else {
        print("Error fetching snapshots: \(error!)")
        return
    }
    snapshot.documentChanges.forEach { diff in
        if (diff.type == .added) {
            let data = diff.document.data( )
            let firstName = data["firstname"] as! String
            let lastnamNname = data["lastname"] as! String

            let personObj2 = Person( firstName , lastName)
            self.messageArray.append(personObj2)
        }
    }
  })
Run Code Online (Sandbox Code Playgroud)

这都是基于文档中的这一部分,所以我强烈建议学习它。