![](/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.