gpt4 book ai didi

firebase - 使用firebase实时数据库创建搜索功能

转载 作者:行者123 更新时间:2023-12-04 01:36:03 24 4
gpt4 key购买 nike

我想使用 firebase 实时数据库为我的应用创建搜索功能,类似于 facebook 搜索。

我做了一些研究并承认 firebase 实时无法使用“文本包含”进行搜索。但我相信必须有一些方法来实现它,比如结合 startAt 或 endAt。

我需要一些建议来做这件事的最佳实践。

数据库结构如下所示:

Restaurant
-->RandomID
---->name: 'Good Restaurant'
---->address:
---->desc:
-->RandomID
---->name: 'Dixon Lee Restaurant'
---->address:
---->desc:
-->RandomID
---->name: 'MCD'
---->address:
---->desc:

已编辑我不确定 startAt 和 endAt 是如何工作的。如果我使用 startAt(3) 是否应该返回 3 及以上?如果我将 startAt 与字符串一起使用会怎样?像下面的问题我ecnounter:

firebase.database().ref('/restaurants').orderByChild('name').startAt('Good').on('value',snap=>{
console.log(snap.val())
})

上述查询将返回: enter image description here

我正在考虑使用 startAt/endAt 实现“文本包含”,它将找到以关键字开始/结束的字段的特定值。不确定这是 startAt/endAt 的用法。

最佳答案

您似乎将 startAt 与一个接受以 开头的字符串的函数混淆了。这根本不是 Firebase 过滤的工作原理。

当您执行 ref('/restaurants').orderByChild('name').startAt('Good') 时,它会做三件事:

  1. 根据 name 值对 restaurants 的所有子节点进行排序。
  2. 查找以 Good 开头的第一个(或按字典顺序在 Good 之后的任何内容)
  3. 从那里返回每个 child

因此,您将获得名称为 Good RestaurantMCD 的子节点。

您可以使用 startAtendAt 来返回子节点的 range,即所有以 开头的节点> 。为此,您需要创建一个从 Good 开始到 Good\uF8FF 结束的范围:

ref('/restaurants').orderByChild('name').startAt('Good').endAt('Good\uF7FF')

由于 \uF8FF 是最后一个已知的 Unicode 字符,因此此查询返回以 e.g. 开头的项目。 GoodGoodieGoodness,但不是 Gooey(因为 Gooe好\uF7FF)。

关于firebase - 使用firebase实时数据库创建搜索功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49764134/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com