代码之家  ›  专栏  ›  技术社区  ›  TOM

检查Firebase数据库子项是否已存在,如果不存在,添加它的最佳方法是什么?

  •  0
  • TOM  · 技术社区  · 5 月前

    我在Unity和C#中使用Firebase实时数据库(不是Firestore)。 我的数据库具有以下结构:

    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 ,此代码不会自动创建它。 我该怎么做?有没有一种方法可以一次性读写?

    1 回复  |  直到 5 月前
        1
  •  0
  •   Frank van Puffelen    5 月前

    Firebase(和大多数数据库)的最佳方法是寻找所谓的幂等写操作,因为它们的扩展性最好。在你的情况下,这就引出了一个问题:总是写价值怎么样 32 到路径 asdfghjkl/Lance Armstrong 这样,您就不需要先检查节点是否存在。

    这在Firebase上有效,因为在祖先节点下写入值时会自动创建祖先节点(因此两者都 asdfghjkl Lance Armstrong 如果它们不存在,则自动创建)。当祖先节点下不再有任何值时,祖先节点也会自动删除,这意味着在大多数情况下,你不必考虑它们。


    如果您写入的值取决于数据库中的值,则上述内容不一定适用。在这种情况下,您需要 use a transaction .