67 votes

Mise à jour de Firebase vs set

Comme le dit le titre, je ne peux pas obtenir les différences entre update et set. Aussi les docs ne pouvez pas m'aider, comme la mise à jour de l'exemple fonctionne exactement de la même si j'utilise l'ensemble de la place.

L' update exemple de la doc:

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);
}

Le même exemple en utilisant 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);
}

Peut-être que l'exemple de la documentation doit être mise à jour, parce que maintenant il ressemble update et set faire exactement la même chose.

Cordialement, Bene

119voto

Frank van Puffelen Points 16029

L'atomicité

Une grande différence entre les deux échantillons que vous avez donné est le nombre d'opérations d'écriture qu'ils envoient à la Firebase serveurs.

Dans le premier cas, vous êtes à l'envoi d'une simple mise à jour() de la commande. À l'intégralité de la commande, soit de réussir ou d'échouer. Par exemple: si l'utilisateur a l'autorisation de poster /user-posts/' + uid, mais n'a pas l'autorisation de poster /posts, l'ensemble de l'opération échouera.

Dans le second cas, vous êtes l'envoi des deux commandes séparées. Avec les mêmes autorisations, l'écriture d' /user-posts/' + uid va réussir maintenant, alors que l'écriture d' /posts échouent.

Mise à jour partielle vs complète remplacer

Une autre différence n'est pas immédiatement visible dans cet exemple. Mais dire que vous êtes à jour le titre et le corps d'un poste existant, au lieu d'écrire un nouveau post.

Si vous souhaitez utiliser ce code:

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

Vous seriez le remplacement de l'ensemble du poste existant. Alors l'original uid, author et starCount champs serait parti et il va juste être le nouveau title et body.

En revanche, si vous utilisez une mise à jour:

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

Après l'exécution de ce code, l'original uid, author et starCount sera toujours là ainsi que la mise à jour de title et body.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X