Jer*_*rry 3 firebase angularfire firebase-realtime-database
我想使用 firebase 实时数据库为我的应用程序创建一个搜索功能,类似于 facebook 搜索。
我做了一些研究并承认 Firebase 实时无法使用“文本包含”进行搜索。但我相信必须有某种方法来实现它,例如组合 startAt 或 endAt。
我需要一些关于最佳实践的建议。
数据库结构将如下所示:
Restaurant
-->RandomID
---->name: 'Good Restaurant'
---->address:
---->desc:
-->RandomID
---->name: 'Dixon Lee Restaurant'
---->address:
---->desc:
-->RandomID
---->name: 'MCD'
---->address:
---->desc:
Run Code Online (Sandbox Code Playgroud)
编辑 我不确定 startAt 和 endAt 如何工作。如果我使用 startAt(3) 是否应该返回 3 及以上?如果我将 startAt 与字符串一起使用会怎样?就像我遇到的下面的问题:
firebase.database().ref('/restaurants').orderByChild('name').startAt('Good').on('value',snap=>{
console.log(snap.val())
})
Run Code Online (Sandbox Code Playgroud)
我正在考虑使用 startAt/endAt 实现“文本包含”,它将找到以关键字开头/结尾的字段的特定值。不确定这是否是 startAt/endAt 的用法。
您似乎对接受以特定值startAt开头的字符串的函数感到困惑。Firebase 过滤根本不是这样工作的。
当你这样做时ref('/restaurants').orderByChild('name').startAt('Good'),它会做三件事:
restaurants根据其值对所有子节点进行排序name。Good(或按字典顺序排列在Good)之后的任何内容Good Restaurant因此,您将获得名称为和的子节点MCD。
您可以使用startAt和endAt返回一系列子节点,即以 开头的所有子节点 Good。为此,您创建一个从 开始Good并结束于 的范围Good\uF8FF:
ref('/restaurants').orderByChild('name').startAt('Good').endAt('Good\uF7FF')
Run Code Online (Sandbox Code Playgroud)
由于\uF8FF是最后一个已知的 Unicode 字符,因此此查询返回以例如 , , 开头的项目Good,Goodie但Goodness不是Gooey(因为Gooe是 after Good\uF7FF)。
| 归档时间: |
|
| 查看次数: |
4810 次 |
| 最近记录: |