Firebase - 同时更新特定字段而不替换所有数据

时间:2018-04-18 16:01:46

标签: javascript json firebase firebase-realtime-database google-cloud-functions

我希望能够在我的Firebase数据库的两个目录中同时发布。我根据"更新特定字段"中提出的示例为此创建了一个函数。 Firebase Javascript documentation的部分:

  function linkTwoUsers(user1, user2) {

    // The two users are "connected".

    var user1Data = {
        userLink: user2
    };
    var user2Data = {
        userLink: user1
    };

    var updates = {};
    updates["/users/" + user1] = user1Data;
    updates["/users/" + user2] = user2Data;

    return database
      .ref()
      .update(updates)
      .then(() => {
        return res.status(200).end();
      })
      .catch(error => {
        return res.status(500).send("Error: " + error.message);
      });
  }

问题在于,当我运行该函数时,它不会上传目录,而是替换其中的所有数据。

以下是函数前的用户目录:

enter image description here

然后:

enter image description here

我们如何确保数据不会覆盖其他数据?谢谢你的帮助。

2 个答案:

答案 0 :(得分:2)

在设置时似乎正在创建一个全新的对象:

 var userData = { someThing: stuff }

当你传入它时,它将覆盖原始对象。解决此问题的一种方法(可能有一种更有效的方法)是从Firebase获取对象,将新属性和值添加到对象,然后将整个对象发送回Firebase。

在某些javascript框架中,您应该能够使用spread operator将对象的所有道具设置为另一个对象,如下所示:

 var newObject = { ...originalObject }
 newObject.userData = "something"
 // then save newObject to firebase

答案 1 :(得分:2)

尝试将您的路径缩小到您要更新的属性:

updates["/users/" + user1 + "/userLink/"] = user1;
updates["/users/" + user2 + "/userLink/"] = user2;