【问题标题】:Good way firebase database structure in order to get those sorted by dates?为了让那些按日期排序的好方法firebase数据库结构?
【发布时间】:2018-09-02 11:55:42
【问题描述】:

我正在使用 firebase 并制作一个应用程序,让用户可以保存 6 张个人资料图片。

现在,我准备了 6 个 imageViews,用户可以通过点击每个 imageViews 来简单地添加他们的图像。

我想将图像保存到 Firebase 存储并将 URL 下载到 Firebase 数据库。从技术上讲,我可以保存它,但我不确定如何构建数据库和图像文件的名称。

目前,我用 Dateformatter 命名图像文件(如“yyyy-MM-dd''HH:mm:ss”.jpg) 并将下载 URL 设置为数据库,例如 "yyyy-MM-dd''HH:mm:ss" : "下载地址"

数据库结构如下:

"User" : { 
  “user’s uid” : { 
    "ImgURLs” : { 
      "2018-09-02_21:59:80" : “(here is the url)”, 
      "2018-09-02_22:05:72" : "(here is another url)", 
      "2018-09-02_23:49:54” : "(here is another url)" 
    }, 
  } 
}

但是通过这种方式,我不知道如何为这 6 个 Imageview 相应地检索数据。

如果我的问题有意义的话,有没有办法实现这个。

【问题讨论】:

  • 这个问题有点道理,但为了提供指导,我们应该真正了解您的 Firebase 的结构,否则我们可能会以错误的方式发送给您。请以 text 的形式包含您的结构的 sn-p,不要包含图像。您可以从 Firebase 控制台 -> 导出 JSON 中获取。将其包含在您的问题中,我们会看看!
  • 您好杰,感谢您的评论。以下是有关照片 URL 的当前数据库结构。
  • "User" : { "user's uid" : { "ImgURLs" : { "2018-09-02_21:59:80" : "(这里是 url)", "2018-09- 02_22:05:72" : "(这里是另一个网址)", "2018-09-02_23:49:54" : "(这里是另一个网址)" }, } }
  • 请在您的问题中包含代码和结构,而不是在 cmets 中。注释是针对... cmets 和代码如果没有格式化真的很难阅读。
  • 您需要将时间戳存储为密钥还是根本不需要?时间戳和图像在 UI 中显示的顺序之间是否存在关联?

标签: ios swift image firebase firebase-realtime-database


【解决方案1】:

对 URL 存储方式的更改应该提供答案

users :
  uid :
    userName: "some name"
    ImgURLs :
       -Jiokoisd094k //key created with childByAutoId
           url : “(here is the url)”
           timestamp : "2018-09-02_21:59:80"
       -k0k4000od0if //key created with childByAutoId
           url : "(here is another url)"
           timestamp : "2018-09-02_22:05:72"

有了这个,只要知道用户的uid,就可以在users/uid/ImgURLs访问他们的图片url。这还允许您存储有关每个图像的时间戳和其他信息;可能是每个子节点中标题的子节点:“Dang,你看起来不错”。

根据用例,如果您需要查询这些节点,最好对数据进行非规范化并将它们存储在单独的节点中

users :
   uid :
      userName: "some name"

urls  :
   uid :
      -Jiokoisd094k //key created with childByAutoId
         url : “(here is the url)”
         timestamp : "2018-09-02_21:59:80"
      -k0k4000od0if //key created with childByAutoId
         url : "(here is another url)"
         timestamp : "2018-09-02_22:05:72"

【讨论】:

  • 哦,非常感谢杰!您有什么好主意可以按时间检索和排序这些网址吗?再次感谢!
  • @George 很高兴它有帮助!有很多选项可以读取它们。由于它只有 6 个 URL,我建议通过 observeSingleEvent 按 .value 一次读取它们,遍历它们以使用数据填充数组并在代码中排序。您可能只是创建一个结构来保存它们并将这些对象存储在数组中。
  • 谢谢!抱歉另一个问题,但要读取数据并将它们放入数组中,下面的哪个路径会好? 1.Database.database().reference().child("urls").child(uid) 2.Database.database().reference().child("urls").child(uid).childByAuto跨度>
  • @George 如何阅读它们取决于我提出的两种结构中的哪一种。它还取决于每个子节点中有多少数据 - 以及您如何读取它;通过 .childAdded (可能不是)或 .value (我会怎么做)。对于您的用例,我建议的第一个似乎很好,因此在 users/uid/ImgURLs 节点上使用 .observeSingleEvent 和 .value 来读取子节点,并遍历它们以添加到数组中。如果您需要有关该代码的帮助,请告诉我。
  • 谢谢!我成功地从数据库中获取数据并将它们存储到一个元组数组中!我正在努力按时间戳对每个元组进行排序,但我可能会问另一个问题! :)
猜你喜欢
  • 2020-05-09
  • 1970-01-01
  • 2019-05-01
  • 2010-10-11
  • 1970-01-01
  • 2017-05-24
  • 1970-01-01
  • 1970-01-01
  • 2019-05-07
相关资源
最近更新 更多