2016-09-28 64 views

回答

2

您無法查詢列表中是否存在特定值。這是Firebase文檔建議不要在數據庫中使用陣列的諸多原因之一。

但在這種情況下(以及我遇到的大多數情況),您可能不需要數組。說你只關心你的用戶挑選了什麼顏色。在這種情況下,可以更有效地存儲的顏色作爲設置

palettes 
    -KSmJZ....A5I 
     "0x474A39": true 
     "0xbA9A7C": true 
     "0xDEDEDF": true 
     "0x141414": true 
     "0x323E35": true 
+0

嗯我明白了,但我仍然可以獲得KSmJZ ... A5I的所有子對象。這樣做的目的是當用戶查詢特定的十六進制顏色時,他將獲得存儲在該特定父代中的5種顏色的整個調色板。 –

+0

是的,最好的數據結構取決於你想如何使用它。這就是爲什麼我停止打字的原因。您需要以允許使用應用程序的方式存儲數據。通常這意味着你需要多次存儲相同的數據。有關詳細介紹,請閱讀[NoSQL數據建模](https://highlyscalable.wordpress.com/2012/03/01/nosql-data-modeling-techniques/)。 –

1

我做到了,以不同的方式,

做,做這樣的功能:

let databaseRef = FIRDatabase.database().reference() 
     let HEX1 = hex1.text! as String 
     let HEX2 = hex2.text! as String 
     let HEX3 = hex3.text! as String 
     let HEX4 = hex4.text! as String 
     let HEX5 = hex5.text! as String 
     let URL = url.text! as String 

     // First set 
     let colorArray1 = [HEX2, HEX3, HEX4, HEX5, URL] 
     databaseRef.child("palette").child(HEX1).setValue(colorArray1) 

     // second set 
     let colorArray2 = [HEX1, HEX3, HEX4, HEX5, URL] 
     databaseRef.child("palette").child(HEX2).setValue(colorArray2) 

     // third set 
     let colorArray3 = [HEX1, HEX2, HEX4, HEX5, URL] 
     databaseRef.child("palette").child(HEX3).setValue(colorArray3) 

     // fourth set 
     let colorArray4 = [HEX1, HEX2, HEX3, HEX5, URL] 
     databaseRef.child("palette").child(HEX4).setValue(colorArray4) 

     // fifth set 
     let colorArray5 = [HEX1, HEX2, HEX3, HEX4, URL] 
     databaseRef.child("palette").child(HEX5).setValue(colorArray5) 

所以當我瞄準任何5個格子時,它會把我整個陣列帶回來。