2017-07-30 25 views
0

我有一個數據結構,像這樣指數:火力地堡 - 上.value的不給排序結果

{ 
    "inbox_events": { 
     "from_users": { 
     "uid1": { 
      "uid2": 1501337181, 
      "uid3": 1501337183, 
      "uid4": 1501337179 
     }, 
     "uid2" : { 
      "uid6": 1501337284, 
      "uid1": 1501337295 
     } 
     } 
    } 
} 

以下規則:

{ 
    "rules": { 
     ".read": "auth != null", 
     ".write": "auth != null", 
     "inbox_events": { 
     "from_users": { 
      "$userId": { 
       ".indexOn": ".value" 
      } 
     } 
     } 
    } 
} 

問題:我不明白爲什麼價值索引不起作用。在Firebase控制檯中,每個$userId的條目仍按字母順序排列,如果我執行queryOrderedByValue,則無法獲得排序結果。

我誤解了Firebase文檔嗎?

在此先感謝!


編輯:

具體來說,我想對數據進行查詢,像這樣:

let queryRef = Database.database().reference().child("inbox_events").child("from_users").child("uid1").queryOrderedByValue() 
queryRef.observe(.value, with: { (snapshot) in 
    print("key: \(snapshot.key), value: \(snapshot.value)") 
}) 

,以便在獲得排序列表,按降序價值,uid小號uid1節點。

+1

後一些代碼。此外,指定你使用的平臺(Android,iOS,網絡,管理SDK,REST API,等等) –

+0

@DimaRostopira:添加了什麼我打算做的,平臺的iOS爲理所當然由弗蘭克·範·P. – Herakleis

+0

編輯這是一個有點不清楚你在做什麼;你想按值查詢,但是uid是鍵。此外,Firebase不提供訂購的降序選項,但有辦法做到這一點。最後的.index並不直接影響項目的排序方式 - 它是查詢性能增強。你能否澄清預期的產出會是什麼? – Jay

回答

1

這很容易忽略。

結果合併成一個單一的快照,打印時,數據轉換爲一個字典,丟失它的順序。

要保持正確的順序,請遍歷返回的快照。

下面是用轉換的快照你的代碼,然後如何通過快照進行迭代,以維持秩序

let queryRef = self.ref.child("inbox_events").child("from_users").child("uid1").queryOrderedByValue() 
queryRef.observe(.value, with: { (snapshot) in 

    //converts to dict 
    print("key: \(snapshot.key), value: \(snapshot.value)") 

    //keeps the order 
    for child in snapshot.children { 
     let snap = child as! DataSnapshot 
     print("key: \(snap.key), value: \(snap.value)") 
    } 
}) 
+0

耶穌是字典...當然。謝謝一堆! – Herakleis