如何一次获取所有 firebase 数据子项?
Posted
技术标签:
【中文标题】如何一次获取所有 firebase 数据子项?【英文标题】:How do I fetch all firebase data children at once? 【发布时间】:2020-10-29 20:17:13 【问题描述】:当从某个child
获取firebase
数据时,我写Database.database().reference().child["mychild1"]...
但是如果我想同时从所有可用的子节点获取数据怎么办?我试过Database.database().reference().child["mychild1"].["mychild2].["mychild3]...
,但没有返回任何东西?有没有办法做到这一点,还是我需要一次获取一个孩子的数据?
编辑
我按照建议省略了.child
。虽然这很可能是获取所有数据的方式,但我突然从firebase
什么也没得到。我的firebase
逻辑中是否还有其他需要更改的内容?
extension Reactive where Base: DatabaseReference
func fetchFireBaseData() -> Observable<[Recipe]>
return Observable.create observer in
self.base.observeSingleEvent(of: .value, with: snapshot in
guard let data = snapshot.children.allObjects as? [DataSnapshot] else return
let recipes = data.compactMap dict -> Recipe? in
guard let value = dict.value as? NSDictionary else return nil
return Recipe(fbKey: dict.key,
recipeImageObject: value[FbKeyName.image.description] as? String ?? "",
recipeTextObject: value[FbKeyName.text.description] as? String ?? "",
recipeHeaderObject: value[FbKeyName.header.description] as? String ?? "",
isFavorite: UserDefaults.standard.favoriteRecipes.contains(dict.key))
observer.onNext(recipes)
observer.onCompleted()
)
return Disposables.create()
【问题讨论】:
【参考方案1】:Database.database().reference()
返回一个代表整个数据库根的DatabaseReference 对象。您可以获取此引用,它将递归地将其所有子级获取到单个快照中。无需使用 child() 来获取更具体的引用。请记住,此快照将使用数据库中的所有数据占用内存,因此对于大型数据库,这可能会导致内存不足。
【讨论】:
谢谢!虽然这肯定是怎么做的,但我的代码中的逻辑突然没有返回任何东西。省略孩子会改变我构建逻辑的方式吗?请参阅已编辑的问题。以上是关于如何一次获取所有 firebase 数据子项?的主要内容,如果未能解决你的问题,请参考以下文章
ReactFire - 将 Firebase 绑定到 React 状态时,获取“对象作为 React 子项无效”
我正在尝试获取对我的 Firebase 数据库子项的正确引用并在我的 RecyclerView 中设置值,但我遇到了一些问题