Firebase startAt String只接受第一个字符

时间:2018-06-06 07:57:25

标签: firebase firebase-realtime-database

我在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 = “约翰”

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

firebase video会触发相同类型的查询,但仅搜索第一个字符。

我正在做的事情是否有问题或是否有其他方法可以使用findKey检索它?非常感谢您的帮助

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

1 个答案:

答案 0 :(得分:1)

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

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"。