ord*_*n09 3 firebase geofire firebase-hosting
我正试图弄清楚如何使用Geofire查询过滤器.假设我有不同类别的餐馆.我想将该类别添加到我的查询中.我该怎么做?
我现在的一种方法是使用Geofire查询密钥,通过每个密钥运行for循环并获取餐厅,并将相应的餐厅插入阵列.这些似乎效率低下.还有其他方法可以解决这个问题吗?
理想情况下,我将获得过滤后的结果,并且只在每个项目即将显示时加载它们.
干杯!
Firebase查询只能按一个条件进行过滤.Geofire已经做了一些"魔术",允许它在经度和纬度上进行过滤.可能会在该等式中添加另一个属性,但远远超出Geofire默认处理的属性.请参阅GeoFire:如何在查询中添加额外条件?
如果您一次只想访问一个类别,则可以将餐厅放在每个类别的顶级节点中,并将Geofire指向一个类别.
/category1
item1
g: "pns0h0mf2u"
l: [-53.435719, 140.808716]
item2
g: "u417k3dwub"
l: [56.83069, 1.94822]
/category2
item3
g: "8m3rz3s480"
l: [30.902225, -166.66809]
/items
item1: ...
item2: ...
item3: ...
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,我们有两个类别:category1有2个项目category2,只有1个项目.对于每个项目,我们都会看到Geofire使用的数据:geohash以及经度和纬度.我们还保留了这3个项目的其他属性的单个列表.
但更常见的是,您只需在客户端代码中执行额外过滤.如果您担心它的性能:测量它,共享代码,JSON数据和测量.
这是一个老问题,但我在网上的几个地方看到过,所以我想我可以分享一个我使用过的技巧。
问题
如果您的数据库中有一个大型集合,例如可能包含数十万个键,则可能无法全部获取它们。如果您尝试根据位置和其他条件过滤结果,您会遇到以下问题:
不幸的是,这是很多网络请求,速度很慢。
更具体地说,假设我们希望获得特定位置 100 英里范围内的所有用户,这些用户年龄在 20 到 25 岁之间。如果 100 英里范围内有 10,000 个用户,这意味着有 10,000 个网络请求来获取用户数据并进行比较他们的性别和年龄。
解决方法:
您可以将比较所需的数据存储在 geofire 键本身中,由分隔符分隔。然后,您只需拆分 geofire 查询返回的键即可访问数据。您仍然需要过滤它们,但这比发送数百或数千个请求要快得多。
例如,您可以使用以下格式:
UserID*gender*age,可能看起来像facebook:1234567*male*24. 重点是
-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz,因为这些字符对于 firebase 生成的密钥是公平的push()您最多可以在 firebase 键中存储768 字节的数据,这很重要。
希望这可以帮助!
| 归档时间: |
|
| 查看次数: |
3618 次 |
| 最近记录: |