使用多个where条件从Firebase数据库中选择
在Firebase数据库中,我有一个预订列表 每个预订如下结构使用多个where条件从Firebase数据库中选择,firebase,firebase-realtime-database,angularfire2,Firebase,Firebase Realtime Database,Angularfire2,在Firebase数据库中,我有一个预订列表 每个预订如下结构 { userUid: string, status: string, moreStuff: { .... } } 我需要选择与具有特定状态(例如,status=confirmed)的特定用户(即,其userUid等于用户的uid,由应用程序知道)关联的所有预订 我可以使用以下查询选择属于特定用户的预订 db.list('bookings', { query: {
{
userUid: string,
status: string,
moreStuff: {
....
}
}
我需要选择与具有特定状态(例如,status=confirmed
)的特定用户(即,其userUid等于用户的uid,由应用程序知道)关联的所有预订
我可以使用以下查询选择属于特定用户的预订
db.list('bookings', {
query: {
orderByChild: 'userUid',
equalTo: user.uid
}
})
但我不知道是否可以添加额外的选择条件,例如,在firebase查询中,您不能在多个字段上进行筛选。我曾多次遇到这种限制 我认为,如果您对数据进行不同的建模,您的挑战将变得更容易。我相信用户和预订之间存在一对多的关系。也就是说,一个用户可能有多个预订,但一个预订可能只有一个用户。如果是这种情况,我将创建一个顶级节点“BookingList”,其中包含每个用户的单独预订列表。结构如下图所示。路径“bookingList/
bookingLists
<userId>
bookings
<bookingKey>
status
...other fields
预订列表
预订
地位
……其他领域
如果您需要进一步过滤预订,您可以在客户端使用可观察操作映射和过滤器进行过滤。只要每个用户没有太大的预订列表,这将可以扩展 Firebase数据库查询只能对单个属性进行排序/筛选。您可以将要筛选的值组合到单个属性中。看见或者,您可以对数据建模以允许查询。例如,乍一看,这似乎是一个分类问题,我在这里讨论过:谢谢。清楚的不过还有一个问题。在中到复杂的应用程序中使用Firebase时,过滤器的一个字段的限制不是很大吗?在我的情况下,您建议的解决方案有效,但如果我更改标准(例如,我希望某个月的“待定”预订),我将不得不在客户端进行筛选(如您所建议的)。是的,这是一个很大的限制。但也有一些变通方法,比如合并字段或客户端过滤。但还是很不方便。但据Firebase团队称,这是实现真正规模化的必要条件。在我的例子中,我使用Firebase并不是因为它的可伸缩性,而是因为它的实时性和它的无服务器模型。我发现我可以忍受这些限制。