[解決済み] Firebaseのアップデートとセット
質問
タイトルにあるように
update
と
set
. また、docsは私を助けることができない、私が代わりにsetを使用する場合、更新の例はまったく同じように動作します。
は
update
の例をdocsから引用しています。
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つのサンプルの大きな違いは、Firebaseサーバーに送信する書き込み操作の数です。
最初のケースでは、1つの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
.
関連
-
[解決済み] FirebaseのapiKeyを公開しても大丈夫ですか?
-
[解決済み】JavaScriptの関数にデフォルトのパラメータ値を設定する
-
[解決済み] JSのDateからDay名
-
[解決済み] AngularJSのエラーです。Cross Origin リクエストはプロトコルスキーム http, data, chrome-extension, https に対してのみサポートされています。
-
[解決済み] Node.jsでbase64エンコードされた画像をAmazon S3へアップロードする
-
[解決済み] Google maps API V3 - 同一地点に複数のマーカーを設置する。
-
[解決済み] node.jsで文字列のsha1ハッシュを取得するにはどうすればよいですか?
-
[解決済み] Reactメモを使うべきではない場合とは?
-
[解決済み] Javascript の parseInt() で先頭のゼロを削除する。
-
[解決済み] Node.jsのES6クラスをrequireで作る
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Node.jsでbase64エンコードされた画像をAmazon S3へアップロードする
-
[解決済み] 文字列がすべて同じ部分文字列で構成されているかどうかを調べるにはどうすればよいですか?
-
[解決済み] アサインの左側にJavascriptのオブジェクトブラケット表記({ ナビゲーション } =)があります。
-
[解決済み] サブドメインにまたがってlocalStorageを使用する
-
[解決済み] AngularJS - ngRepeatフィルタリングされた結果の参照を取得する方法
-
[解決済み] javascriptで文字列から関数を作成する方法はありますか?
-
[解決済み] JSHintの'+'前の改行不良の説明
-
[解決済み] Prototypeを使ってtextareaを自動サイズ調整するには?
-
[解決済み] JavaScriptのArray.sort()メソッドでシャッフルするのは正しいのか?
-
[解決済み] javascriptのキャンバスで画像をリサイズする (スムーズ)