firebase - QML Firebase startAt 返回未定义
问题描述
我正在开发一个“typeahead”类型的函数,它将使用当前键入的文本检查我的数据库,以提供使用 Felgo 的用户的搜索建议。
至于不搜索每个条目,我希望使用startAt
andlimitTo
来减少数据使用。
但是,当应用startAt
我的搜索只返回未定义时,我尝试通过将我的 startAt 从变量更改为显式数据来对此进行测试,但这仍然只返回未定义。
我的功能如下:
function searchUsers(searchString) {
db.getValue("public/nameList/", {
orderByChild: true,
startAt: searchString, //searchString is a variable with my .currentText to search.
limitToFirst: 10,
}, function(success, key, value) {
if(success) {
searchArr = []
searchArr = value
console.debug("Read user value for key", key, "from DB:", value)
}
})
}
我也尝试过var searchString
通过JSON.stringify(searchString)
并返回未定义!
完全删除startAt:
查询会按预期返回整个结果nameList
,但无论我如何尝试实现startAt
它总是返回未定义。
nameList
我的JSON示例是:
nameList: {
"EddieLaw245" : 530343772383,
"EddieLawrence91" : 530343772385,
"EdwardL91" : 530343772386,
"EdwardLaw" : 530343772384,
"Edwardlawrence91" : 530343772380,
"JoBrownLondon" : 530343772381,
"KatiePrescottHair" : 543592635596,
"Tracey-Sweeting" : 530343772382
}
因此,对于上面的示例,当我键入E
时,它应该删除最后 3 个条目,依此类推。
解决方案
问题是您正在指定orderByChild: true
. 如果我们查看该文档:
orderByChild:如果存在,则查询对象的属性将按此属性值定义的子路径中的值排序。按子属性排序使过滤器属性 startAt、endAt 和 equalTo 按子属性值过滤
从这里可能不会立即清楚,但允许您对每个节点下orderByChild
的属性值进行排序。因此,您的代码尝试根据 property 的值对子节点进行排序,这是不可能的(实际上应该在库中生成编译时错误),因为下面的节点没有自己的任何子属性。它们只有一个键和一个值。true
nameList
您正在寻找的是orderByKeys
,它在其键上对子节点进行排序。所以:
db.getValue("public/nameList/", {
orderByKeys: true,
startAt: searchString,
limitToFirst: 10,
}
您通常还需要指定一个endAt
值,以确保您的预输入仅显示以搜索字符串开头的值。如果您只允许键中的 ASCII 值,那么最简单的方法是:
startAt: searchString,
endAt: searchString + "~",
这里~
不是魔术运算符,而只是最后的 ASCII 字符。如果要允许更广泛的字符集,则需要使用该字符集中的最后一个字符 - 例如\uF7FF
Unicode 的最后一个代码点。
来自 OP 的更新 虽然我在典型的 Firebase 使用中是正确的 Franks;我怀疑由于 Felgo 插件,我使用的完整解决方案有轻微的调整;
db.getValue("public/nameList/", {
"orderByKey": true,
"startAt": searchString,
"endAt": searchString+"~",
"limitToFirst": 10,
}, function(success, key, value) {....}
})
上面的注释 - 我的过滤器/查询用引号括起来"startAt"
,orderByKeys
我也用过orderByKey
推荐阅读
- mysql - 显示本月尚未创建项目的用户(count=0)
- python - 查询中带有年份的算术表达式问题
- istio - 如何在 istio 中始终允许 HTTP OPTION 请求?
- java - 使用spring boot(安全)和keycloak启用角色身份验证?
- ninject - GlobalConfiguration.Configuration.UseNinjectActivator 与 Hangfire.Ninject 不存在
- mobile - 如何构建一个向后端 API 提交大量表单数据的 Flutter 应用程序
- postgresql - 这些索引是否对 customer_id 做同样的事情?
- r - eval 中的错误:找不到 dateRangeInput 的对象
- android - 使用 Glide 从 gif 中删除不必要的白色背景?
- sql-server - 在 MSSQL 中选择带有条件的上一行和下一行