我在火力地堡以下數據:在覆蓋之前檢查Firebase的現有數據?
- 設備
- iphone5的
- DATE_CREATED: 「1456183905」
我試圖確定是否存在「date_created」,如果它不存在,則創建它。
我讀過快照,但有沒有更簡單的方法來檢查Firebase以查看這些數據是否存在?我現在所使用的是快照,但它與事件處理程序綁定在一起。我不能只是做一個基本的查詢,看看這個條目是否存在?
謝謝。
我在火力地堡以下數據:在覆蓋之前檢查Firebase的現有數據?
- 設備
- iphone5的
- DATE_CREATED: 「1456183905」
我試圖確定是否存在「date_created」,如果它不存在,則創建它。
我讀過快照,但有沒有更簡單的方法來檢查Firebase以查看這些數據是否存在?我現在所使用的是快照,但它與事件處理程序綁定在一起。我不能只是做一個基本的查詢,看看這個條目是否存在?
謝謝。
您可以測試是否在您的銀行代碼存在價值,通過:
let ref = Firebase(url: "https://stackoverflow.firebaseio.com/35570687")
ref.observeSingleEventOfType(.Value, withBlock: { snapshot in
if (!snapshot.exists()) {
ref.setValue([".sv": "timestamp"])
}
else {
print("already exist")
}
})
但因爲這是唯一的客戶端,有一個機會,兩個客戶端運行的代碼幾乎確切時間並且最終都會寫入時間戳。在上面的代碼片段中,這不是一個問題,但在實際使用情況下,這種競爭條件可能是不需要的。
安德烈評論,你可以在你的安全規則驗證這一點:
"date_created": {
".write": "!data.exists() || data.val() == newData.val()"
這驗證了無論這是你寫date_created
第一次(這樣的數據還不存在),或者以其他方式使價值不變。
你實際上可以在你的安全規則中處理這個,查看https://www.firebase.com/docs/security/api/rule/validate.html –
哦!安全規則可以做到這一點?太棒了,謝謝,我會用這些。謝謝,安德烈。 – SH10151