簡體   English   中英

QML Firebase startAt 返回未定義

[英]QML Firebase startAt returns undefined

我正在使用“預先輸入”類型 function,它將使用當前鍵入的文本檢查我的數據庫,以提供使用 Felgo 的用戶的搜索建議。

這是Felgos Firebase 文檔的鏈接

至於不搜索每個條目,我希望使用startAtlimitTo來減少數據使用。

但是,當應用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM