2017-02-21 31 views
1

在Firebase数据库中,我有一个列表预订从使用多个条件的Firebase数据库中选择条件

每个预订如以下结构

{ 
    userUid: string, 
    status: string, 
    moreStuff: { 
    .... 
    } 
} 

我需要选择相关联的给某个用户的所有预订(例如:一个userUid等于用户,这是的UID已知由应用程序)有一定的地位(例如status = confirmed)。

我可以使用下面的查询

db.list('bookings', { 
     query: { 
      orderByChild: 'userUid', 
      equalTo: user.uid 
     } 
    }) 

选择属于特定用户的预订,但我不知道我是否能如添加额外的选择条件status = confirmed

+0

Firebase数据库查询只能对单个属性进行排序/过滤。您可能能够将要在单个属性中过滤的值组合在一起。请参阅http://stackoverflow.com/questions/26700924/query-based-on-multiple-where-clauses-in-firebase。或者,您可以建模数据以允许查询。例如,这看起来像一个分类问题乍一看,我在这里覆盖:http://stackoverflow.com/questions/40656589/firebase-query-if-child-of-child-contains-a-value –

回答

1

在firebase查询中,您不能筛选多个字段。我多次遇到此限制。

我认为如果您对数据进行不同的建模,您的挑战将变得更加容易。我相信你在用户和预订之间有一对多的关系。也就是说,用户可能有很多预订,但预订可能只有一个用户。如果是这种情况,我会创建一个顶级节点“bookingLists”,其中包含每个用户的单独预订列表。结构如下所示。路径“bookingList/< userId>”包含给定用户的预订列表。如果您知道userId,则可以访问该列表。它将包含该用户的所有预订。然后,您可以查询每个预订中的单个字段以进行过滤。

bookingLists 
    <userId> 
    bookings 
     <bookingKey> 
      status 
      ...other fields 

如果您需要进一步过滤预订,您可以在客户端使用可观察操作映射和过滤器进行过滤。只要每个用户没有太大的预订列表,这将会扩展。

+0

谢谢。明确。还有一个问题。过滤器的一个字段的限制不仅限于在中等复杂应用中使用Firebase的限制吗?在我的情况下,你建议的解决方案的工作原理,但如果我改变标准(例如,我想'待定'预订某个月),我将不得不在客户端过滤(如你所建议的)。 – Picci

+1

是它的一个很大的局限性。但是还有一些解决方法,比如组合字段或客户端过滤。但它仍然非常不方便。但根据Firebase团队的看法,这是实现真正缩放的必要条件。就我而言,我使用Firebase并不是为了扩展,而是主要针对其实时性和无服务器模型。我发现我可以忍受这些限制。 –