![](/img/trans.png)
[英]Firebase StartAt() doesn't work - it returns the same results without it
[英]QML Firebase startAt returns undefined
我正在使用“预先输入”类型 function,它将使用当前键入的文本检查我的数据库,以提供使用 Felgo 的用户的搜索建议。
这是Felgos Firebase 文档的链接
至于不搜索每个条目,我希望使用startAt
和limitTo
来减少数据使用。
但是,当应用startAt
时,我的搜索只返回未定义的,我尝试通过将我的 startAt 从变量更改为显式数据来测试它,但这仍然只返回未定义的。
我的function如下:
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)
}
})
}
我也尝试通过JSON.stringify(searchString)
传递我的var searchString
并返回未定义!
删除startAt:
查询完全按预期返回nameList
的整个结果,但无论我如何尝试实现我的startAt
,它总是返回未定义。
我的姓名列表nameList
的示例是:
nameList: {
"EddieLaw245" : 530343772383,
"EddieLawrence91" : 530343772385,
"EdwardL91" : 530343772386,
"EdwardLaw" : 530343772384,
"Edwardlawrence91" : 530343772380,
"JoBrownLondon" : 530343772381,
"KatiePrescottHair" : 543592635596,
"Tracey-Sweeting" : 530343772382
}
因此,对于上面的示例,当我键入E
时,它应该删除最后 3 个条目,依此类推。
问题是您指定orderByChild: true
。 如果我们查看它的文档:
orderByChild:如果存在,查询的 object 的属性将按此属性值定义的子路径中的值排序。 按子属性排序使过滤器属性 startAt、endAt 和 equalTo 按子属性值过滤
从中可能无法立即清楚,但orderByChild
允许您对每个节点下的属性值的结果进行排序。 因此,您的代码尝试根据属性true
的值对子节点进行排序,这是不可能的(并且实际上应该在库中生成编译时错误),因为nameList
下的节点没有它们的任何子属性自己的。 他们只有一个键和一个值。
您正在寻找的是orderByKeys
,它根据键对子节点进行排序。 所以:
db.getValue("public/nameList/", {
orderByKeys: true,
startAt: searchString,
limitToFirst: 10,
}
您通常还需要指定一个endAt
值,以确保您的预输入仅显示以搜索字符串开头的值。 如果您只允许在键中使用 ASCII 值,最简单的方法是:
startAt: searchString,
endAt: searchString + "~",
这里的~
不是魔术运算符,而只是最后一个 ASCII 字符。 如果您想允许更广泛的字符集,则需要使用该字符集中的最后一个字符 - 例如是 Unicode 的最后一个代码点。
从 OP 更新虽然我是 certian Franks 正确的典型 Firebase 用法; 我怀疑由于我使用的 Felgo 插件,完整的解决方案有轻微的调整;
db.getValue("public/nameList/", {
"orderByKey": true,
"startAt": searchString,
"endAt": searchString+"~",
"limitToFirst": 10,
}, function(success, key, value) {....}
})
上面的注释——我的过滤器/查询被引号"startAt"
包围,也代替了orderByKeys
,我使用orderByKey
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.