gpt4 book ai didi

javascript - Firebase 'set' 函数删除整个节点

转载 作者:行者123 更新时间:2023-11-30 19:23:56 25 4
gpt4 key购买 nike

我正在尝试使用 Firebase Cloud 函数来运行一些基于触发器的函数。

我的数据库是这样的

users{
userId{
dataSets{
dataSet1 { //data }
dataSet2 { //data }
}
weeklyTriggers {
dataSet1{
weekNo{
//updates
}
}
}
}
}

我正在使用 onWrite 函数作为特定节点上的触发器:

exports.doSome = functions.database.ref('/users/{userId}/dataSets/{dataSetNo}').onWrite(
async (change, context) => {
const userId = context.params.userId;
const dataSetNo = context.params.dataSetNo;
const weekNo = getWeekNo(); //is a custom function works fine
var databaseRef = admin.database().ref('users');
databaseRef.child(userId).child('weeklyTriggers').child(dataSetNo).child(weekNo).set({
data: 'Some Data'
});
});

我遇到的问题是,当我对 dataSet1 进行更新时,它会设置值,但是当我为 dataSet2 设置值时,它会删除整个节点weeklyTriggers 然后创建weeklyTriggers/dataSet2/30/

如何确保 weeklyTriggers 不会被删除?

编辑:

更新代码

exports.doSome = functions.database.ref('/users/{userId}/dataSets/{dataSetNo}').onWrite(
async (change, context) => {
const userId = context.params.userId;
const yearNo = context.params.yearNo;
const weekNo = getWeekNo();
var ref = change.after.ref.root.child('users');
var dataPath = `${userId}/weeklyTriggers/${dataSetNo}/${weekNo}/data`;

var foo={};
foo[dataPath] = "Some data";

return ref.update(foo);
});

最佳答案

如果您在某个位置调用 set(),该位置的所有数据都将替换为您在调用中提供的数据。如果您只想更新该位置下的某些属性,请使用 update()

例如:

databaseRef.child(userId).child('weeklyTriggers').child(dataSetNo).child(weekNo).update({
data: 'Some Data'
});

您可以提供 update 的路径,以更深入地更新 JSON 中的属性。所以上面的也可以用:

databaseRef.update({
`${userId}/weeklyTriggers/${dataSetNo}/${weekNo}/data`: 'Some Data'
});

关于javascript - Firebase 'set' 函数删除整个节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57124644/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com