swift - wanting to fetch firestore like realTimeDatabase
问题描述
is there any way in Firestore to get List of Data in single array ,, for example ..in RealTimeDatabase we get Data array by calling single value instead of using ForEachLoop...for Example in realtimeDatabase we get value by
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)
but in Firestore we have to used ForLoop .....For Example in Firestore we used
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)
}
So is there any way to get Data of Firestore as whole ObjectArray
解决方案
Firebase 实时数据库始终返回DataSnapshot
. 即使保证结果是一个列表,您也会返回 a DataSnapshot
,其中每个子节点都是该列表中的一个元素。
Cloud Firestore 针对单个结果和结果列表返回不同的类型。对于单个结果,Firestore 返回 aDocumentSnapshot
或 a QueryDocumentSnapshot
,它允许您获取单个文档的值(和元数据)。对于查询或集合,Firestore 返回一个QuerySnapshot
,其中包含/对象的列表。DocumentSnapshot
QueryDocumentSnapshot
无法.childAdded
从 Cloud Firestore 请求等效项。这是 API 设计人员有意进行的更改,因为许多开发人员混淆了 aDataSnapshot
在结果中可能具有的两个角色。
在 RTDB 术语中,Firestore 总是触发一个.value
事件,您必须循环遍历结果。如果您循环QuerySnapshot.docChanges
仅检查type
= added
in,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)
}
}
})
这一切都基于文档中的这一部分,因此我强烈建议您研究一下。
推荐阅读
- wordpress - WordPress 在搜索中包含自定义字段
- python - 将文档字符串中的预期结果指定为十六进制?
- haskell - 如何使用 Template Haskell 生成导入和样板列表?
- reactjs - 如何将 Fabric UI Office 主题应用到正文背景?
- java - 在 Jython 中导入 Paramiko
- asp.net - 运行存储过程异步
- react-native - 使用 React Navigation 的动态路由
- python - 如何使用 pyspark 解析 xml 文件并将其转换为数据框?
- excel - 如何仅使用 VBA 在一张纸上将多个范围导出为 PDF
- javascript - 如果用户两次选择相同的项目,ReactJS 语义 UI 下拉菜单不会触发