2016-02-19 103 views
0

訂購我在安全&規則選項是:火力地堡queryOrderedByChild叫不上名字的斯威夫特

{ 
"rules": { 
".read": true, 
".write": true, 
"groups": { 
    ".indexOn": "name" 
    } 
} 
} 

我的JSON結構是這樣的:

{ 
"groups": { 
    "-KAti17inT7GbHEgbzzS": { 
     "author": "ruben", 
     "name": "C" 
    }, 
    "-KAti36BQGO8sRmfufkE": { 
     "author": "ruben", 
     "name": "D" 
    }, 
    "-KAti2CVAHtJllQm_m-W": { 
     "author": "ruben", 
     "name": "A" 
    } 
} 

正如你所看到的,它是沒有按「名稱」排序,因爲它應該是。 我做錯了什麼?

回答

2

.indexOn.indexOn安全規則中的指令僅告訴數據庫在name屬性上創建一個索引。它不會自動重新排序數據。

另外:JSON對象中鍵的順序是未定義的。

要按名稱獲取您的羣組列表,您必須執行Firebase查詢。從Firebase documentation on queries

let ref = Firebase(url:"https://dinosaur-facts.firebaseio.com/dinosaurs") 
ref.queryOrderedByChild("height").observeEventType(.ChildAdded, withBlock: { snapshot in 
    if let height = snapshot.value["height"] as? Double { 
     println("\(snapshot.key) was \(height) meters tall") 
    } 
}) 

如果你適應這個片段到你的數據結構,將打印以正確的順序組。

+0

非常感謝Frank,我認爲.indexOn使得當你添加一個新項目時,它會以有序的方式添加它。現在很清楚!我非常感激。順便說一下,我提出了一個新問題,可否請您檢查一下? – Ruben

+1

如果我的回答很有用,請點擊左側的向上箭頭。如果它回答了您的問題,請點擊旁邊的複選標記接受它。這樣,其他人也知道你已經得到了幫助,他們可以繼續下一個問題。 –

相關問題