为什么多个位置的更新表现为SET而不是UPDATE?

时间:2017-02-27 07:00:10

标签: javascript firebase firebase-realtime-database

SETUP

/demo/key的值类似于{a:1, b:2, c:3}

/user/demo/key,有true

之类的值
var database = firebase.database();
var rootRef = database.ref();

情景A

rootRef.child('demo/key').update({a:0});
// Result -> {a:0, b:2, c:3}
// b and c not overwritten, still exist -> happy
// update() acts like I expected / read

情景B

var data = {a:7};
var updates = {};
    updates[`/demo/${key}`] = data;
    updates[`/user/demo/${key}`] = true;

rootRef.update(updates);
// Result -> {a:7}
// b:2, c:3 are gone -> Acts like set() ???
// Expected -> {a:7, b:2, c:3}

我不确定为什么会这样......但我希望update()函数在任一实例中都以相同的方式运行并进行部分写入。

我做错了什么或错过了一个关键概念?

1 个答案:

答案 0 :(得分:2)

它确实像update一样工作。当您将数据传递到update时,每个密钥都为set,并且密钥为&#39}。未包含在数据中的兄弟姐妹不会受到影响。

要确保不删除bc,您需要做的就是使用更具体的密钥。例如:

var updates = {};
    updates[`/demo/${key}/a`] = 7;
    updates[`/user/demo/${key}`] = true;