想要获取像实时数据库这样的火库
Posted
技术标签:
【中文标题】想要获取像实时数据库这样的火库【英文标题】:wanting to fetch firestore like realTimeDatabase 【发布时间】:2020-01-04 15:19:23 【问题描述】:Firestore 中是否有任何方法可以获取单个数组中的数据列表,例如 ..在 RealTimeDatabase 中,我们通过调用单个值而不是使用 ForEachLoop 来获取数据数组...例如,在 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)
但在 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)
那么有什么方法可以将 Firestore 的数据作为整个 ObjectArray 获取
【问题讨论】:
【参考方案1】:Firebase 实时数据库始终返回 DataSnapshot
。即使保证结果是一个列表,您也会返回一个DataSnapshot
,其中每个子节点都是该列表中的一个元素。
Cloud Firestore 会为单个结果和结果列表返回不同的类型。对于单个结果,Firestore 返回 DocumentSnapshot
或 QueryDocumentSnapshot
,这允许您获取单个文档的值(和元数据)。对于查询或集合,Firestore 返回一个QuerySnapshot
,其中包含DocumentSnapshot
/QueryDocumentSnapshot
对象的列表。
无法从 Cloud Firestore 请求与 .childAdded
等效的文件。这是 API 设计人员有意进行的更改,因为许多开发人员混淆了 DataSnapshot
在结果中可能具有的两个角色。
在 RTDB 术语中,Firestore 始终会触发 .value
事件,您必须遍历结果。如果你循环 QuerySnapshot.docChanges
只检查 type
= added
在 QueryDocumentSnapshot.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)
)
这都是基于this section in the documentation,所以我强烈推荐学习。
【讨论】:
添加了一个例子。但我也强烈建议您学习文档,并在此处为 ios 开发人员学习 Firestore 代码实验室:codelabs.developers.google.com/codelabs/firestore-ios以上是关于想要获取像实时数据库这样的火库的主要内容,如果未能解决你的问题,请参考以下文章