我将 Firebase 实时数据库(不是 Firestore)与 Unity 和 C# 结合使用。 我的数据库具有以下结构:
asdfghjkl
Lance Armstrong: 30
qwertyuiop
Bob Dylan: 45
zxcvbnm
Googoo Gaga: 29
我想查看某个顶级子级是否存在,如果不存在,我想创建它。不然我想更新一下。
例如,我想知道数据库中是否存在
asdfghjkl
,如果存在,请将Lance Armstrong
的值更新为32
。如果没有,我想创建它并在其下方添加 Lance Armstrong: 32
。 这样做的最佳方法是什么?
我已经尝试过了
FirebaseDatabase.DefaultInstance.GetReference("asdfghjkl").GetValueAsync()
但是当没有条目时
asdfghjkl
,此代码不会自动创建它。
我该怎么做?有没有一种方法可以一次性读写?
Firebase(以及大多数数据库)的最佳方法是寻找所谓的幂等写入操作,因为它们的扩展性最好。在你的例子中,这就引出了一个问题:总是将值
32
写入路径 asdfghjkl/Lance Armstrong
怎么样?这样你就不需要先检查节点是否存在。
这适用于 Firebase,因为当您在祖先节点下写入值时,会自动创建祖先节点(因此,如果
asdfghjkl
和 Lance Armstrong
不存在,则会自动创建)。顺便说一句,当祖先节点下不再有任何值时,祖先节点也会自动删除,这意味着在大多数情况下您不必考虑它们。
如果您写入的值取决于数据库中的值,则上述不一定适用。在这种情况下,您将需要使用交易。