我希望能够在我的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);
});
}
问题在于,当我运行该函数时,它不会上传目录,而是替换其中的所有数据。
以下是函数前的用户目录:
然后:
我们如何确保数据不会覆盖其他数据?谢谢你的帮助。
答案 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;