Firebase删除或创建规则

Firebase删除或创建规则,firebase,firebase-realtime-database,firebase-security,Firebase,Firebase Realtime Database,Firebase Security,在Firebase文档中的“现有数据与新数据”一节中,说明以下规则适用于数据的创建或删除 // we can write as long as old data or new data does not exist // in other words, if this is a delete or a create, but not an update ".write": "!data.exists() || !newData.exists()" 有人能解释一下为什么写操作允许删除操作,因为在

在Firebase文档中的“现有数据与新数据”一节中,说明以下规则适用于数据的创建或删除

// we can write as long as old data or new data does not exist
// in other words, if this is a delete or a create, but not an update
".write": "!data.exists() || !newData.exists()"
有人能解释一下为什么写操作允许删除操作,因为在我看来这是错误的吗

在文件的同一节中,它指出: newData表示正在写入的新数据与现有数据的合并结果

问题是,如果存在删除操作,那么数据将存在,新数据也将存在,因为它是文档状态下的合并结果。因此,表达式
!data.exists()| |!newData.exists()
应返回false

有人能告诉我我是否遗漏了什么吗?

上面写着:

  • 如果没有旧数据(写入空位置)
  • 或者如果新数据为空(删除(清空)位置)
能够像那样删除数据是很方便的,尤其是在进行原子更新时。这意味着“做这些多重操作,但前提是它们都成功”。e、 g


在那里,我们将一个条目写入历史记录表,并使用空写入操作一次性从挂起表中删除该项。

Arghhh。。。很抱歉现在我明白了。删除操作后,newData变量将完全为空!!!文档应说明newData变量包含操作完成后的数据。同样地,如果操作是delete操作,那么newData将是空的。
dbRef.update({
  history: { someNewKey: 'The transaction happened!' },
  pending: { somePendingKey: null }
});