【问题标题】:How do I fetch all firebase data children at once?如何一次获取所有 firebase 数据子项?
【发布时间】: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()
        }
    }
}

【问题讨论】:

    标签: ios swift firebase firebase-realtime-database


    【解决方案1】:

    Database.database().reference() 返回一个代表整个数据库根的DatabaseReference 对象。您可以获取此引用,它将递归地将其所有子级获取到单个快照中。无需使用 child() 来获取更具体的引用。请记住,此快照将使用数据库中的所有数据占用内存,因此对于大型数据库,这可能会导致内存不足。

    【讨论】:

    • 谢谢!虽然这肯定是怎么做的,但我的代码中的逻辑突然没有返回任何东西。省略孩子会改变我构建逻辑的方式吗?请参阅已编辑的问题。
    猜你喜欢
    • 1970-01-01
    • 2023-03-22
    • 2016-12-22
    • 1970-01-01
    • 2020-08-07
    • 2019-05-24
    • 2019-07-01
    • 2019-02-03
    • 2018-02-18
    相关资源
    最近更新 更多