firebase - 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 上,无法更改
解决方案
您的代码没有问题,您的期望有问题。(我一直想把它写成答案:))
该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”。
推荐阅读
- utf-8 - UniData / CentOS - 指南和修复文件导致语言组错误
- kerberos - Chrome-headless 不喜欢 kerberos 票
- azure - 使用 azure-sdk-for-python 将节点部署到 AKS 群集
- c# - .Net Core 2.1 似乎忽略了 modelBuilder.Entity
().HasData - mysql - 如何正确关闭 NodeJS 到 MySQL 的连接?
- python - 将 2 级 multiidex 系列重新组合为数据框,以便二级索引成为名称?
- android - 从免安装应用升级到完整应用的最佳实践
- python-3.x - Python3中的CSV文件比较算法
- python - 从另一个文件调用函数以在模板中使用
- php - 表单中的数据不会传递到 MySQL 数据库