我在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上,无法更改
答案 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"。