我在火力地堡以下数据:在覆盖之前检查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