问题 检索firebase数组中项目列表的相关项列表


我想获取firebase中的项目列表,但该项目的每个元素都有一个相关项目列表。我无法获得列表,也没有使用 火力-UTIL 也没有firebase数组 $扩展 功能。

我的firebase数据看起来像这样:

items
    item1
        name: "Item 1"
        user: user1
        images
           image1: true
           image2: true
    item2
        name: "Item 2"
        user: user1
        images:
            image3: true
            image4: true
    item3
        name: "Item 3"
        user: user2
        images:
            image5: true
            image6: true

users
    user1
        name: "User 1"
        email: "user1@email.com"
    user2
        name: "User 2"
        email: "user2@email.com"

images
    image1
        image: "data:image/jpeg;base64,/9j/..."
        thumb: "data:image/jpeg;base64,/9j/..."
    image2
        image: "data:image/jpeg;base64,/9j/..."
        thumb: "data:image/jpeg;base64,/9j/..."
    image3
        image: "data:image/jpeg;base64,/9j/..."
        thumb: "data:image/jpeg;base64,/9j/..."
    image4
        image: "data:image/jpeg;base64,/9j/..."
        thumb: "data:image/jpeg;base64,/9j/..."
    image5
        image: "data:image/jpeg;base64,/9j/..."
        thumb: "data:image/jpeg;base64,/9j/..."

我只想获得包含所有数据的项目列表。就像是:

items
    item1
        name: "Item 1"
        user
            name: "User 1"
            email: "user1@email.com"
        images
            image1
                image: "data:image/jpeg;base64,/9j/..."
                thumb: "data:image/jpeg;base64,/9j/..."
            image2
                image: "data:image/jpeg;base64,/9j/..."
                thumb: "data:image/jpeg;base64,/9j/..."
    item2
        name: "Item 2"
        user
            name: "User 1"
            email: "user1@email.com"
        images
            image3
                image: "data:image/jpeg;base64,/9j/..."
                thumb: "data:image/jpeg;base64,/9j/..."
            image4
                image: "data:image/jpeg;base64,/9j/..."
                thumb: "data:image/jpeg;base64,/9j/..."
    item3
        name: "Item 3"
        user
            name: "User 2"
            email: "user2@email.com"
        images
            image5
                image: "data:image/jpeg;base64,/9j/..."
                thumb: "data:image/jpeg;base64,/9j/..."
            image6
                image: "data:image/jpeg;base64,/9j/..."
                thumb: "data:image/jpeg;base64,/9j/..."

它看起来像一个相当常见的用例,但我被困在这里。我努力了 这个 解决方案(两种方式),但我不能让它工作。数据结构也有点不同,因为我需要关联另一个列表中的列表。


10167
now


起源

实际上,您无法根据当前结构以您要求的格式检索数据。您能否提供有关为何一次获取所有数据的信息?通常,您会获得一个用户名列表,或者与第3项一起使用但通常不是一次全部的图像列表。我认为可能有一个问题的解决方案,理解用例会有所帮助。 - Jay
@Jay我想要显示一个项目列表。每个项目都有一个图像列表,但我只会在列表中显示其中一个作为项目的主要图片。为什么不呢,也许在鼠标悬停时我想改成另一个。但至少如果我能用它来做它会很好。 - cor


答案:


目标是显示项目列表。

每个项目都有一个图像列表。

最初,显示项目列表和每个项目的图像之一。

建议的方法:

要填充项目列表及其初始缩略图,我们需要一个单独的节点来从中提取初始设置。

更新的项目节点

items:
  item_id_xx: //this should be a Firebase generated node name
   name: "Item 2"
   user: "uid_for_user_1"
   images:
     image3: "data:image/jpeg;base64,/9j/..."
     image4: "data:image/jpeg;base64,/9j/..."

这是用于主列表的节点,用户可以在其中单击项目缩略图以获取更多详细信息:

item_list_for_ui
  random_node_0
    item_id: "item_id_aa"
    name: "Item 1" //if you want to display the name in the list
    initial_thumb: "data:image/jpeg;base64,/9j/..." //initial thumb
    link_to: "image1"
  random_node_1
    item_id: "item_id_xx"
    name: "Item 2"
    initial_thumb: "data:image/jpeg;base64,/9j/..."
    link_to: "image3"
  random_node_2
    item_id: "item_id_qq"
    name: "Item 3"
    initial_thumb: "data:image/jpeg;base64,/9j/..."
    link_to: "image1"

应用程序启动时,从items_list_for_ui节点填充列表。

该节点很浅,包含Firebase item_id,项目名称(如果需要),从中获取初始图像缩略图的链接以及Firebase中主图像的link_to。

例如:如果用户单击项目2的缩略图,则可以使用带有.value的observeSingleEvent加载项目详细信息。

/项目/ item_id_xx /图片/图像3

你可以通过添加say,一个到item_list_for_ui的翻转链接来解释这一点

  random_node_1
    item_id: "item_id_xx"
    name: "Item 2"
    initial_thumb: "data:image/jpeg;base64,/9j/..."
    thumb_link: "image3"
    rollover_thumb: "external link to rollover"
    rollover_link: "image4"

这种结构非常灵活,您可以通过更新相应的子节点来更改要在主列表中显示的拇指和翻转。

它也很有效,因为它避免加载数百个项目和数百个子图像节点 - 加载所有这些节点和子节点会使ui过载(在某些情况下)。

使用这种结构,item_list_for_ui是紧凑的,因此即使有数百个项目,它也只是该数据的一小部分。

你可能会对自己说'自己,这是重复的数据'。是的,它是,并且Firebase中的重复数据是一个正常的过程,并鼓励:它使结构更平坦,并使查询和数据处理更快。

如需更多阅读,请参阅 非规范化数据让您的呼吸保持新鲜感


5
2018-05-03 12:58



谢谢@Jay的答案。但是你如何加入数据呢?你会用吗? firebase-util 插入?如果是这样,怎么样?我不知道如何进行关系,因为item id是动态的 - cor
@cor Firebase没有连接功能,因为它不是SQL。在Firebase中可以通过多种方式关联数据和复制数据。我想我的答案回答了你的直接问题。您的评论/跟进是一个很好的新问题(并且有一些答案可以在Stackoverflow上解决它)。查看这些答案,如果您有具体问题,请发布! - Jay
对不起,你是对的 - cor

热门问题

不使用eval / new函数的JavaScript模板库 当涉及内部类时,Java继承如何工作 .NET Windows服务的奇怪问题 在.ipa或.app下查找App ID 快速入门XSLT参考[关闭] 如何找出Android应用程序中未使用的资源 Ruby中并发的同步方法[重复] 将std :: chrono :: system_clock :: time_point转换为struct timeval并返回 Google Drive API V3(javascript)更新文件内容 Bootstrap 3.0 - 将元素推到底部 受密码保护的.NET ClickOnce部署? 如何用postgresql安装wordpress coq Set或Type如何成为命题 硒滚动元素进入(中心)视图 在Spring Transaction JUnit测试中自动装配Hibernate会话的正确方法 Git的Dockerfile策略 如何在FOS_PICKFOLDER中使用IFileDialog,同时仍在对话框中显示文件名 在Firefox扩展中复制Google Chrome浏览器操作弹出效果 CakePHP找到MAX 芹菜 - 完成任务的召唤功能 从使用fmemopen创建的流中读取宽字符 .NET是否为每个程序集创建一个字符串实习池? DefaultModelBinder不绑定嵌套模型 Navigator.MediaDevices.getUserMedia()使用了哪些相机通信标准? 选择命名空间名称时应该知道什么? cout Swagger Codegen CLI Java客户端 - 如何正确使用它 一个很好的哈希函数用于采访整数,字符串? Maven 3 ciManagement配置的目的是什么? 如何通过语言文化获取代码页?