我只想更新 email、firstname 和 lastname 为空的值。
我需要这个,这样如果用户决定在设置中更改这些设置,它们就不会在用户每次使用 facebook 登录时被覆盖。
有什么解决方案可以在没有数据快照的情况下检查字段是否为空?努力最大限度地提高效率。
每个用户的数据库结构:
最佳答案
一种方法是使用 firebase transaction .
事务允许您在设置/更新数据库引用之前检查它的当前值。它的主要用例是防止来自多个源的多个并发更新,但它也可以用于这种情况——读取然后写入。
在交易 block 中,您获得正在交易的数据库引用的值,并且可以检查该值是否为空(因此“创建”案例)-> 然后根据需要更新它并返回 TransactionResult.success(withValue:新数据)
。
如果对象已经设置,您只需使用 TransactionResult.abort()
中止事务,并且不会执行对 DB 的写入。
另一种不需要读/写的选项是在相关引用上设置一个 Firebase 数据库规则,该规则仅在先前值为 null 时才允许写入:
"refPath": {
".write": "data.val() == null && newDataval() != null"
}
为现有引用第二次写入数据库将失败。 我会选择交易 - 在客户端代码中更能表达需求。
关于ios - 仅在信息不存在时才将数据写入 firebase - Swift iOS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45534155/