下面是我的云功能代码我试图将数据从用户节点复制到挑战节点
exports.copyChallengeDate = functions.database.ref(`Users/{pushId}/DateChallengeAccept`).onCreate((snapshot, context)=>{
var DateChallengeAccept = snapshot.val();
console.log('Challenge', context.params.pushId, DateChallengeAccept);
var challenge = DateChallengeAccept;
return admin.database().ref('Challenge/' + context.params.pushId).child('DateChallengeAccept').set(challenge);
});
但问题是当我试图将日期从用户表复制到挑战节点时,它只发生在QS5h99YxS0ZGpT42fpUFvzOdpTi1 与“用户”节点相同。我想在两个uid中复制它(QS5h99YxS0ZGpT42fpUFvzOdpTi1,7aH9Ag8414VzM0n7P6ur4LvcepI2) D存在于挑战节点中。我被困在最后两天,请帮帮我
答案 0 :(得分:1)
更新后,您注意到DateChallengeAccept
在创建记录时未初始化。您应该使用其他方法,例如onUpdate()
(或onWrite()
)而不是onCreate()
,就像您在问题中所做的那样。请执行以下操作:
exports.copyChallengeDate = functions.database.ref(`Users/{pushId}`).onUpdate((change, context) =>
const DateChallengeAccept = change.after.val().DateChallengeAccept;
if ( DateChallengeAccept === undefined) {
return false;
}
const referredBy = change.after.val().referredBy;
console.log('Challenge', context.params.pushId, DateChallengeAccept);
const dateChallengeAcceptObj = {
"DateChallengeAccept": DateChallengeAccept
};
let updates = {};
updates['Challenge/' + context.params.pushId + '/DateChallengeAccept'] = dateChallengeAcceptObj;
updates['Challenge/' + referredBy + '/DateChallengeAccept'] = dateChallengeAcceptObj;
return admin.database().ref().update(updates);
});
您需要在函数中获取referredId
值,因为此数据项包含其他用户的ID(即7aH9Ag8414VzM0n7P6ur4LvcepI2)。因此,您必须在父节点上触发事件,而不是在DateChallengeAccept
节点上触发事件。
然后您必须使用update()
方法同时写入两个节点,请参阅此处的文档:https://firebase.google.com/docs/database/web/read-and-write#update_specific_fields
所以你应该这样做:
exports.copyChallengeDate = functions.database.ref(`Users/{pushId}`).onCreate((snapshot, context)=>{
const DateChallengeAccept = snapshot.val().DateChallengeAccept;
if ( DateChallengeAccept === undefined) {
return false;
}
const referredBy = snapshot.val().referredBy;
console.log('Challenge', context.params.pushId, DateChallengeAccept);
const dateChallengeAcceptObj = {
"DateChallengeAccept": DateChallengeAccept
};
let updates = {};
updates['Challenge/' + context.params.pushId + '/DateChallengeAccept'] = dateChallengeAcceptObj;
updates['Challenge/' + referredBy + '/DateChallengeAccept'] = dateChallengeAcceptObj;
return admin.database().ref().update(updates);
});