使用多个where条件从Firebase数据库中进行选择

时间:2017-02-21 11:17:27

标签: firebase firebase-realtime-database angularfire2

在Firebase数据库中,我有一个预订列表。

每个预订作为以下结构

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

我需要选择与某个用户相关的所有预订(即 userUid 等于用户的 uid ,应用程序已知)具有特定状态(例如status = confirmed)。

我可以使用以下查询选择属于特定用户的预订

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

但我不知道是否可以添加额外的选择条件,例如status = confirmed

1 个答案:

答案 0 :(得分:1)

在firebase查询中,您无法在多个字段上进行过滤。我多次遇到过这种限制。

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

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

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