【发布时间】:2019-02-25 00:23:15
【问题描述】:
我在 Firebase 数据库中有一堆 cmets,我想通过 Cloud Function 对 cmets 进行一些更新(这是一个简化的示例,我将做一些需要 Cloud Function 的逻辑)。
我需要做的是遍历数据库中的所有 cmets,调整其评级节点,然后使用调整后的 cmets 更新数据库。
我花了很多时间研究这个,但我对 Cloud Functions 完全陌生,所以我很难弄清楚这一点。 我假设我想将所有 cmets(可能有数千个)的所有更改存储在数组或对象中,然后一次进行更新,而不是分别为每个评论进行更新?
顺便说一句,这段代码不起作用,我假设数组和返回是完全错误的。
exports.increaseRating = functions.database.ref('/comments/')
.onUpdate((snapshot) => {
var updates = [];
snapshot.before.forEach((element) => {
var comment = element.val();
comment.rating += 1000;
updates.push(comment);
});
return updates;
})
我用来更新一个条目的代码。我需要同时为所有 cmets 做同样的事情。
exports.increaseRating = functions.database.ref('/comments/{commentId}')
.onUpdate((snapshot, context) => {
const comment = snapshot.before.val();
const newRating = comment.rating += 1000;
const now = new Date().getTime();
if (comment.lastUpdate) {
if (comment.lastUpdate > now - (30 * 1000)) {
return null;
}
}
return admin.database().ref(`/comments/${context.params.commentId}`).update({
"rating": newRating,
"lastUpdate": now
})
})
【问题讨论】:
-
您显示的代码都不会更新数据库。请记住:如果您更新
/comments下的任何内容,您的代码将再次触发自身,从而创建一个无限循环。 -
@frankvanpuffelen 谢谢弗兰克,请告诉我,我将如何更新数据库?我用我用来更新一个条目的代码更新了这个问题,我主要关心的是如何一次更新说 1000 cmets。
标签: javascript firebase express firebase-realtime-database google-cloud-functions