首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QML返回未定义的

QML返回未定义的
EN

Stack Overflow用户
提问于 2021-08-11 11:57:53
回答 1查看 179关注 0票数 0

我正在开发一个“提前”类型函数,它将检查我的数据库和当前的打印文本,以提供使用Felgo的用户的搜索建议。

以下是Felgos Firebase文档的链接

至于不是搜索每个条目,我希望使用startAtlimitTo作为一个较低的数据使用。

然而,当应用startAt时,我的搜索只返回未定义的,我尝试通过将startAt从变量更改为显式数据来测试它,但这仍然只返回未定义的数据。

我的职能如下:

代码语言:javascript
复制
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)传递我的JSON.stringify(searchString),并且返回未定义的!

删除startAt:查询将像预期的那样完全返回nameList的整个结果,但无论我如何实现nameList,它总是返回未定义的结果。

我的nameList JSON示例如下:

代码语言:javascript
复制
nameList: {
  "EddieLaw245" : 530343772383,
  "EddieLawrence91" : 530343772385,
  "EdwardL91" : 530343772386,
  "EdwardLaw" : 530343772384,
  "Edwardlawrence91" : 530343772380,
  "JoBrownLondon" : 530343772381,
  "KatiePrescottHair" : 543592635596,
  "Tracey-Sweeting" : 530343772382
}

因此,在上面的示例中,当我输入E时,它应该删除最后3个条目,依此类推。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-11 15:08:52

问题在于您指定的是orderByChild: true。如果我们看一下它的文档

orderByChild:如果存在,则查询对象的属性将由该属性值定义的子路径上的值排序。按子属性排序使筛选属性startAt、endAt和equalTo根据子属性值进行筛选。

这可能不是立即明确的,但是orderByChild允许您在每个节点下对属性值排序结果。因此,您的代码试图在属性true的值上对子节点排序,这是不可能的(而且实际上应该在库中生成编译时错误),因为nameList下的节点没有自己的任何子属性。他们只有一把钥匙和一个价值。

您要寻找的是orderByKeys,它命令其密钥上的子节点。所以:

代码语言:javascript
复制
db.getValue("public/nameList/", {
    orderByKeys: true,
    startAt: searchString,
    limitToFirst: 10,
}

您通常还希望指定一个endAt值,以确保您的提前输入只显示以搜索字符串开头的值。如果只允许键中的ASCII值,最简单的方法是:

代码语言:javascript
复制
  startAt: searchString,
  endAt: searchString + "~",

这里的~不是魔术运算符,而是最后的ASCII字符。如果希望允许更广泛的字符集,则需要使用该字符集中的最后一个字符--例如,\uF7FF是Unicode的最后一个代码点。

更新从OP,虽然我是证明与典型的Firebase使用的法兰克正确;我怀疑由于费尔戈插件,我正在使用的完全解决方案有一个轻微的调整;

代码语言:javascript
复制
db.getValue("public/nameList/", {
    "orderByKey": true,
    "startAt": searchString,
    "endAt": searchString+"~",
    "limitToFirst": 10,
    }, function(success, key, value) {....}
})

上面的注释-我的过滤器/查询被引号"startAt"包围,也没有使用orderByKeys,而是使用了orderByKey

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68741562

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档