2015-06-22 55 views
1
检索数据

我的火力地堡阵列的结构如下:从火力点阵列

[ 
    { 
    '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. 获取记录用户id = XXX
  2. 获取所有记录,其中“itemOrdered” = '高清'

火力地堡文档谈论使用orderByC但这并没有多大意义。

+0

[避免在分布式系统中使用数字顺序标识(即数组)。](https://www.firebase.com/docs/web/guide/understanding-data.html#section-arrays-in-firebase)。真? [是的,真的](https://www.firebase.com/blog/2014-04-28-best-practices-arrays-in-firebase.html) – Kato

回答

2

假设你正在使用JavaScript SDK访问火力地堡:

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

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

如果你想建立一个查询,得到的顺序项目def来自用户xxx,那么Firebase的查询目前无法实现。查询多个属性的值的唯一方法是将它们组合到一个属性中,以允许您想要的查询。例如。

  • ref.orderByChild('userId_itemOrdered').equalTo('xxx_def')
  • +0

    Frank ..这正是我想要实现的..获取用户xxx订购的所有项目。当你说这在firebase中是不可能的时......我不会理解你的声明......你的解决方案.orderBY()。equalTo()在服务器端究竟做了什么? – runtimeZero

    +0

    对不起,我误读了您的示例数据。在我的辩护中,项目'abc'和'def'有些难以解释。我的意思是你只能查询一个属性。所以你可以得到所有物品的订购,但不是所有用户'xxx'订购的'def'(除非你合并这些物业价值,就像我在#3中展示的那样)。我会更新我的答案。 –

    0

    有根据您的平台的附加选项。

    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每个孩子可以与用户的用户ID节点购买的itemId的(这使得它能够轻松地确切地知道用户购买什么物品)。或者创建一个items_purchased节点,每个子节点都是一个物品编号节点,然后是关联的userId谁购买了该物品。