【问题标题】:Retrieving data from firebase Array从 Firebase 数组中检索数据
【发布时间】:2015-09-07 17:22:22
【问题描述】:

我的 Firebase 数组具有以下结构:

[
   {
  'userId': '12345',
  'itemOrdered' : 'abc',
  'status': 'pending'
   ...other attributes
   },
  {
  'userId': '6789',
  'itemOrdered' : 'def',
  'status' : 'pending',
   ...other attributes
   },
  {
  'userId': '12345',
  'itemOrdered' : 'def',
  'status' : 'complete',
   ...other attributes
   },

]  

我不知道如何检索以下数据:

  1. 获取 userId = xxx 的记录
  2. 获取 'itemOrdered" = 'def' 的所有记录

Firebase 文档谈论使用 orderByChild 但这没有多大意义。

【问题讨论】:

标签: firebase firebase-realtime-database


【解决方案1】:

假设您使用 JavaScript SDK 访问 Firebase:

  1. ref.orderByChild('userId').equalTo('xxx')

  2. ref.orderByChild('itemOrdered').equalTo('def')

如果您尝试构建从用户 xxx 获取项目 def 的订单的查询,那么 Firebase 的查询目前无法实现。查询多个属性值的唯一方法是以允许查询的方式将它们组合在一个属性中。例如

  1. ref.orderByChild('userId_itemOrdered').equalTo('xxx_def')

【讨论】:

  • Frank..这正是我想要实现的目标.. 获取用户 xxx 订购的所有商品。当您说这在 firebase 中是不可能的...我不'安静地理解您的陈述...您的解决方案 .orderBY().equalTo() 在服务器端究竟做了什么?
  • 抱歉,我误读了您的示例数据。在我的辩护中,项目abcdef 有点难以解释。我的意思是你只能查询一个属性。因此,您可以订购所有物品,但不是所有def 用户xxx 订购(除非您结合这些属性值,如我在#3 中所示)。我会更新我的答案。
【解决方案2】:

根据您的平台,还有其他选项。

1) Query for the userId and then filter in code for the item you are looking for. 

2) Query for the userId and build another query based on those results.

3) Flatten your data!

例如:创建一个名为 user_purchases 的节点,每个子节点都可以是一个 userId 节点,其中包含用户购买的 itemId(这样可以快速准确地知道用户购买了哪些商品)。或者创建一个 items_purchased 节点,每个子节点都是一个商品编号节点,然后关联购买该商品的用户 ID。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-17
    • 1970-01-01
    相关资源
    最近更新 更多