我正在使用Google Cloud功能更新“Rooms/{pushId}/ins”,该功能可以从多个“door/{MACaddress}/ins”获取新的 In 数据。该功能目前是这样的:
exports.updateRoomIns = functions.database.ref('/doors/{MACaddress}').onWrite((change, context) => {
const beforeData = change.before.val(); // data before the write (data of all the doors child nodes)
const afterData = change.after.val(); // data after the write (data of all the doors child nodes)
const roomPushKey = afterData.inRoom; // get the right room
const insbefore = beforeData.ins;
const insafter = afterData.ins; // get the after data of only the "ins" node
console.log(insafter);
if (insbefore != insafter) {
const updates = {};
“const updates = {}”正上方的行创建了一个空对象,该对象(稍后)将被填充,并(稍后)更新“rooms/{roompushkey}/ins”节点...
我认为问题可能就在这里,在“更新”常量上,因为每次函数运行时,这个对象都被重新定义为一个整体...
代码继续...
updates['/rooms/' + roomPushKey + '/ins'] = insafter; // populate the "INS" object with the values taken from the "/doors/{MACaddress/ins"
return admin.database().ref().update(updates); // do the update
} else {
return
}
});
如果我只有一个门,这将工作,但由于我有几个门与不同的Ins数据,每次我更新一个单一的“门/{MACaddress/Ins”,整个“房间/{pushId}/Ins”被替换为上一次更新的门上的任何数据...我知道update方法应该用于此目的,我想保留这个“更新”对象,以便以后把数据分散到其他路径。2这可能吗?3有什么建议吗?
这是我的数据结构:
root: {
doors: {
111111111111: {
MACaddress: "111111111111",
inRoom: "-LBMH_8KHf_N9CvLqhzU", // I will need this value for the clone's path
ins: {
// I am creating several "key: pair"s here, something like:
1525104151100: true,
1525104151183: true,
}
},
222222222222: {
MACaddress: "222222222222",
inRoom: "-LBMH_8KHf_N9CvLqhzU", // I will need this value for the clone's path
ins: {
// I am creating several "key: pair"s here, something like:
2525104157710: true,
2525104157711: true,
}
}
},
rooms: {
-LBMH_8KHf_N9CvLqhzU: {
ins: {
// I want the function to clone the same data here:
1525104151100: true,
1525104151183: true,
}
}
}
1条答案
按热度按时间e5nszbig1#
根据我之前对您的相关问题(How to clone a node to another path based on a reference value from the initial path on Google Cloud Functions?)的回答,我将对代码进行如下修改:
换句话说,不是替换整个
ins
对象,而是在现有ins节点中添加新的子节点。