更新firebase路径(如果存在)
Posted
技术标签:
【中文标题】更新firebase路径(如果存在)【英文标题】:Updating firebase path if it exists 【发布时间】:2019-11-17 20:55:00 【问题描述】:我的应用程序包含 24 小时存在的信息位。此信息有可能被其他用户投票。投票数记录在数据库中。如果有人对一条信息进行投票,我希望它仅在路径当前存在时才更新,因为数据可能已达到 24 小时限制,并且自显示时间和投票时间起已被删除。
使用Datasnapshot.hasChild 之类的问题是我需要编写 2 条单独的读写指令。读取指令的数据可能存在,但可能会达到 24 小时标记并在写入指令之前被删除。
这是我的数据库的结构,节点状态在数据库的另一部分重复,以减少读取量。如果这个节点变为nil,另一个节点仍然存在,但是这个节点在这里,所以我可以通过一次写入来获取所有小于24小时的最新状态。
我想要一个规则,如果 status 的键已更改,或者 status 不再是节点,则不允许更改 votes 的值。
【问题讨论】:
您使用的是实时数据库吗?你是说信息可能在用户设备上,但在他们投票时不再在服务器上? 【参考方案1】:有几种方法可以解决这个问题。
一种方法是利用 Firebase 规则。在此之前,让我先这样说,让 Firebases 高兴:
规则不是过滤器
但是,您可以制定一个规则,如果某个节点不存在,将阻止写入。我需要知道您的具体结构和用例才能提出解决方案,但 Firebase 规则文档中很好地涵盖了规则,Referencing Data In Other Paths 是一个起点。
但是,一个超级干净的简单选项是下面的代码,它只会写入一个节点,如果它存在的话。一读一写。
func onlyWriteIfNodeExists()
let ref = your_firebase.ref.child("may_not_exist")
ref.observeSingleEvent(of: .value, with: snapshot in
if snapshot.exists()
snapshot.ref.setValue("updated value")
else
print("node didn't exist")
)
结构是
firebase_root
may_not_exist: "some value"
所以如果节点 may_not_exist 存在,“some value”将被替换为“updated value”,否则将打印“节点不存在”到控制台。
话虽如此,如果目的是不允许用户对不存在的项目进行投票,那么 UI 应该反映这一点。换句话说,如果应用程序提出要投票的主题并且某个主题超出范围,则应用程序应该收到一个事件,并可能将其从 UI 中删除,或者在主题标题上画一条线以指示它不再可用。
【讨论】:
我更新了我的问题以显示我的数据库结构并解释更多我想要做什么。我认为我正在寻找一个规则。以上是关于更新firebase路径(如果存在)的主要内容,如果未能解决你的问题,请参考以下文章
Uncaught FirebaseError: Firebase: No Firebase App '[DEFAULT]' has been created - 在 vue.js 中调用 Fireba
Stripe 和 Firebase:FirebaseError:collection() 的第一个参数应为 CollectionReference、DocumentReference 或 Fireba
运行 firebase Deploy -Flutter -Firebase 时在错误的路径中生成 Functions 文件夹