タイトルにあるように、update
とset
の違いはわかりません。また、代わりにsetを使用しても更新の例はまったく同じように動作するため、ドキュメントは役に立ちません。
ドキュメントのupdate
の例:
function writeNewPost(uid, username, title, body) {
var postData = {
author: username,
uid: uid,
body: body,
title: title,
starCount: 0
};
var newPostKey = firebase.database().ref().child('posts').Push().key;
var updates = {};
updates['/posts/' + newPostKey] = postData;
updates['/user-posts/' + uid + '/' + newPostKey] = postData;
return firebase.database().ref().update(updates);
}
set
を使用した同じ例
function writeNewPost(uid, username, title, body) {
var postData = {
author: username,
uid: uid,
body: body,
title: title,
starCount: 0
};
var newPostKey = firebase.database().ref().child('posts').Push().key;
firebase.database().ref().child('/posts/' + newPostKey).set(postData);
firebase.database().ref().child('/user-posts/' + uid + '/' + newPostKey).set(postData);
}
update
とset
はまったく同じことをするようになったため、ドキュメントの例を更新する必要があります。
よろしく、ベネ
指定した2つのサンプルの大きな違いの1つは、Firebaseサーバーに送信する書き込み操作の数です。
最初のケースでは、単一のupdate()コマンドを送信しています。そのコマンド全体が成功または失敗します。たとえば、ユーザーが/user-posts/' + uid
に投稿する権限を持っているが、/posts
に投稿する権限を持っていない場合、操作全体が失敗します。
2番目のケースでは、2つの個別のコマンドを送信しています。同じ権限で、/user-posts/' + uid
への書き込みは成功しますが、/posts
への書き込みは失敗します。
この例では、別の違いはすぐにはわかりません。ただし、新しい投稿を作成するのではなく、既存の投稿のタイトルと本文を更新するとします。
このコードを使用する場合:
firebase.database().ref().child('/posts/' + newPostKey)
.set({ title: "New title", body: "This is the new body" });
既存の投稿全体を置き換えることになります。したがって、元のuid
、author
、およびstarCount
フィールドはなくなり、新しいtitle
およびbody
のみが存在します。
一方、アップデートを使用する場合:
firebase.database().ref().child('/posts/' + newPostKey)
.update({ title: "New title", body: "This is the new body" });
このコードの実行後、元のuid
、author
、およびstarCount
は、更新されたtitle
およびbody
と同様にそこに残ります。