如何一次获取所有 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 数据子项?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Firebase 将初始数据加载与增量子项分开?

如何查询 Firebase 中不存在子项的位置? [复制]

从 Firebase 获取具有唯一 ID 的子项的值

ReactFire - 将 Firebase 绑定到 React 状态时,获取“对象作为 React 子项无效”

我正在尝试获取对我的 Firebase 数据库子项的正确引用并在我的 RecyclerView 中设置值,但我遇到了一些问题

如何在 Firebase 中显示 autoID 子项下的数据?