从使用多个条件的Firebase数据库中选择条件
在Firebase数据库中,我有一个列表预订。从使用多个条件的Firebase数据库中选择条件
每个预订如以下结构
{
userUid: string,
status: string,
moreStuff: {
....
}
}
我需要选择相关联的给某个用户的所有预订(例如:一个userUid等于用户,这是的UID已知由应用程序)有一定的地位(例如status = confirmed
)。
我可以使用下面的查询
db.list('bookings', {
query: {
orderByChild: 'userUid',
equalTo: user.uid
}
})
选择属于特定用户的预订,但我不知道我是否能如添加额外的选择条件status = confirmed
在firebase查询中,您不能筛选多个字段。我多次遇到此限制。
我认为如果您对数据进行不同的建模,您的挑战将变得更加容易。我相信你在用户和预订之间有一对多的关系。也就是说,用户可能有很多预订,但预订可能只有一个用户。如果是这种情况,我会创建一个顶级节点“bookingLists”,其中包含每个用户的单独预订列表。结构如下所示。路径“bookingList/< userId>”包含给定用户的预订列表。如果您知道userId,则可以访问该列表。它将包含该用户的所有预订。然后,您可以查询每个预订中的单个字段以进行过滤。
bookingLists
<userId>
bookings
<bookingKey>
status
...other fields
如果您需要进一步过滤预订,您可以在客户端使用可观察操作映射和过滤器进行过滤。只要每个用户没有太大的预订列表,这将会扩展。
谢谢。明确。还有一个问题。过滤器的一个字段的限制不仅限于在中等复杂应用中使用Firebase的限制吗?在我的情况下,你建议的解决方案的工作原理,但如果我改变标准(例如,我想'待定'预订某个月),我将不得不在客户端过滤(如你所建议的)。 – Picci
是它的一个很大的局限性。但是还有一些解决方法,比如组合字段或客户端过滤。但它仍然非常不方便。但根据Firebase团队的看法,这是实现真正缩放的必要条件。就我而言,我使用Firebase并不是为了扩展,而是主要针对其实时性和无服务器模型。我发现我可以忍受这些限制。 –
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 –