使用自动增量 Swift 3 在 Firebase 数据库中存储帖子(图像、标题)

Posted

技术标签:

【中文标题】使用自动增量 Swift 3 在 Firebase 数据库中存储帖子(图像、标题)【英文标题】:Storing posts (image, caption) in Firebase database with auto increment Swift 3 【发布时间】:2016-12-07 14:09:24 【问题描述】:

我正在尝试将用户帖子存储在我的 Firebase 数据中,如下所示:

我已使用以下代码成功将每个图像存储在存储中:

        let storage = FIRStorage.storage()
        let data = UIImagePNGRepresentation(postImage!)
        // guard for user id
        guard let uid = FIRAuth.auth()?.currentUser?.uid else 
            return
        
        let photosRef = storage.reference().child("posts")
        let imageName = NSUUID().uuidString
        let photoRef = photosRef.child("\(uid)")

        photoRef.child("\(imageName)").put(data!, metadata: nil)(metaData,error) in
            if let error = error 
                print("there was an error")
                print(error.localizedDescription)
                return
            else
                // store downloadURL
                let downloadURL = metaData!.downloadURL()!.absoluteString

                let values = ["uid": uid, "caption": caption, "download_url": downloadURL]

                // store downloadURL at database
                let databaseRef = FIRDatabase.database().reference()
                // store values in posts/post_1 (post_1..post_2 etc)
            

        

但是,我无法将 downloadURL(值数组)存储在我的帖子数据库中,因为我不知道如何为 post 1post 2post 3 等设置增量值

有没有更好的方法将帖子存储在posts 数据库中而不需要增量值?

感谢任何帮助。

谢谢!

【问题讨论】:

Firebase documentation on storing lists of data 中有一个完整的部分。您会注意到,这部分没有像您尝试使用的那样使用索引,原因有很多。如果您想了解有关这些原因的更多信息,请阅读此classic blog post。 感谢您的博文 -- 我之前已通读,但会再次学习 Firebase 的最佳实践 【参考方案1】:

有多种方法可以存储增量值 - 这完全取决于您希望如何存储这些值以及您将如何检索和使用它们。

一般过程是使用 childByAutoId 创建父节点 - Firebase 会为您生成不同的节点名称。

let ref = rootNode.childByAutoid()
ref.setValue("my value")

这将导致节点具有 Firebase 生成的密钥

root_node
   -Ynaosdokasodkpasd: "my Value"

话虽如此,很难以有意义的方式对它们进行排序,因此您可能需要添加能够指定顺序的节点

let ref = rootNode.childByAutoid()
let dict = ["text": "my value", timeStamp: "20161207131600"]
ref.setValue(dict)

导致

-Ynaosdokasodkpasd
    text: "my value"
    timeStamp: "20161207131600"

然后,您可以使用时间戳在 Firebase 查询中对数据进行排序。

【讨论】:

非常感谢!就像你建议的那样,我最终使用了 childByAutoid。

以上是关于使用自动增量 Swift 3 在 Firebase 数据库中存储帖子(图像、标题)的主要内容,如果未能解决你的问题,请参考以下文章

可以将服务器端逻辑添加到 firebase 以实现自动增量密钥吗?

Firebase实时数据库中的自动增量ID生成器

Firebase 在 Swift 中检索低于自动 ID 的数据

(Swift 4) 如何在 firebase 中生成自定义自动 id?

查询和 Firebase 中的位置(swift 3)

设置值 Firebase - Swift 3