我想使用 firebase 实时数据库为我的应用程序创建一个搜索功能,类似于 facebook 搜索。
我做了一些研究并承认 Firebase 实时无法使用“文本包含”进行搜索。但我相信必须有一些方法来实现它,例如组合 startAt 或 endAt。
我需要一些关于最佳实践的建议。
数据库结构将如下所示:
Restaurant
-->RandomID
---->name: 'Good Restaurant'
---->address:
---->desc:
-->RandomID
---->name: 'Dixon Lee Restaurant'
---->address:
---->desc:
-->RandomID
---->name: 'MCD'
---->address:
---->desc:
Edited我不确定 startAt 和 endAt 如何工作。如果我使用 startAt(3) 是否应该返回 3 及以上?如果我将 startAt 与字符串一起使用会怎样?就像我遇到的下面的问题:
firebase.database().ref('/restaurants').orderByChild('name').startAt('Good').on('value',snap=>{
console.log(snap.val())
})
The above query will return:
我正在考虑使用 startAt/endAt 实现“文本包含”,它将找到以关键字开头/结尾的字段的特定值。不确定这是否是 startAt/endAt 的用法。
你似乎很困惑startAt
带有一个接受开头字符串的函数with一定的值。 Firebase 过滤根本不是这样工作的。
当你这样做时ref('/restaurants').orderByChild('name').startAt('Good')
,它做了三件事:
- 对所有子节点进行排序
restaurants
在他们的name
value.
- 找到第一个开头的
Good
(或按字典顺序排列的任何内容Good
)
- 从那时起返回每个孩子
所以你得到了带有名称的子节点Good Restaurant
and MCD
.
您可以使用startAt
and endAt
返回一个range子节点,即所有开始的节点with Good
。为此,您创建一个从以下位置开始的范围:Good
并结束于Good\uF8FF
:
ref('/restaurants').orderByChild('name').startAt('Good').endAt('Good\uF7FF')
Since \uF8FF
是最后一个已知的 Unicode 字符,此查询返回以例如开头的项目。Good
, Goodie
, Goodness
, 但不是Gooey
(since Gooe
是在之后Good\uF7FF
).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)