1. ホーム
  2. javascript

[解決済み] Firebaseのアップデートとセット

2023-06-13 12:52:02

質問

タイトルにあるように updateset . また、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);
}

というわけで、ドキュメントにある例は更新されるべきかもしれません。 updateset は全く同じことをします。

よろしくお願いします。 ベネ

どのように解決するのですか?

アトミシティ

ご紹介した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 , authorstarCount フィールドがなくなり、新しい titlebody .

一方、アップデートを使用する場合。

firebase.database().ref().child('/posts/' + newPostKey)
        .update({ title: "New title", body: "This is the new body" });

このコードを実行すると、元の uid , authorstarCount は引き続き存在し、更新された titlebody .