首页 > 解决方案 > Firebase startAt String 只需要第一个字符

问题描述

我在 xyz 下有如下结构

{
    "pushKey000": {
        "findKey": "john_1",
        "userName": "john",
        "topic": 1
    },
    "pushKey001": {
        "findKey": "john_2",
        "userName": "john",
        "topic": 2
    },
    "pushKey002": {
        "findKey": "joel_1",
        "userName": "joel",
        "topic": 1
    }
}

现在我正在尝试进行查询,我想要 findKey 以“ john ”开头的所有条目的数据。我尝试了以下方法:(例如使用 REST)

https://abc.firebaseio.com/xyz.json?orderBy= "findKey"&startAt="john"

这给了我所有的结果,包括“乔尔”。基本上它只使用startAt的第一个字符,在本例中为J

Firebase 视频会触发相同类型的查询,但仅使用第一个字符进行搜索。

我做错了什么还是有其他方法可以使用 findKey 检索它?非常感谢您提前提供的帮助

PS:我的 .indexOn 在 findKey 上,无法更改

标签: firebasefirebase-realtime-database

解决方案


您的代码没有问题,您的期望有问题。(我一直想把它写成答案:))

startAt()函数用作查询的起点,而不是过滤器。因此,在您的情况下,它将找到“john”的第一次出现并从该点返回所有内容(包括 Joel、Kevin、Tim 等)。

不幸的是,没有直接的方法来进行查询where findKey contains the string "john"。但幸运的是,有一个(部分)解决方法使用endAt().

您的查询将如下所示:

orderBy="findKey"&startAt="john"&endAt="john\uf8ff"

\uf8ff是最后一个 unicode 字符(如果我错了,请纠正我)。

有了这个,您可以查询以“john”开头的值,例如“johnnie”、“johnn”、“john”。但不是“1john”或“johm”或“joel”。


推荐阅读