2017-10-23 10 views
1

既存データ対新規データセクションのlinkのFirebaseドキュメントでは、データの作成または削除に次のルールが適用されることを示しています。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は、書き込まれる新しいデータと既存のデータのマージ結果を表します。

問題は、削除操作があれば、その後データが存在することであり、それはドキュメントの状態としてマージされた結果であるようあるnewDataも存在します。そのため、式!data.exists() || !newData.exists()はfalseを返す必要があります。

誰かが何か不足しているかどうか教えてください。

答えて

1

それは言っている:

  • 一切古いデータ(空の場所への書き込み)が存在しない場合。
  • 新しいデータが空の場合(場所の削除(空にする))。

このようなデータを削除することは、特にアトミック更新を行う場合に便利です。つまり、「これらの複数の操作を実行しますが、すべてが成功した場合のみ」です。例えば

dbRef.update({ 
    history: { someNewKey: 'The transaction happened!' }, 
    pending: { somePendingKey: null } 
}); 

があり、私たちは、履歴テーブルにエントリを書き込み、空の書き込みを使用して一度に保留テーブルから項目を削除します。

+0

Arghhh ...申し訳ありません。今私はそれを得た。削除操作の後、newData varは完全に空です!!! – ekalyvio

+1

ドキュメントには、操作の終了後にnewData変数にデータが含まれていることを示す必要があります。そして、その操作が削除操作であれば、newDataは空になります。 – ekalyvio

関連する問題