【发布时间】:2018-01-19 20:01:15
【问题描述】:
有一个用户可以在其中评价另一个用户图片的应用程序,我想计算一个用户收到的总票数。我发现使用 Firebase 实现此目标的最佳方法是控制“onWrite”事件并在每个用户收到投票时手动更新计数器。
我在以下代码中发现的问题是,“votesCount”并未在第一个“onWrite”事件中准确更新,而是在下一个“onWrite”事件中更新为前一个用户的速率。为什么会这样?这是投票应用程序的好方法吗?
以下方法的目的是检查被投票用户是否有'votes_count',如果为true,则将新值添加到旧值,相反情况下只需添加新值。
exports.updateVotesCount = functions.database.ref('/votes/{id}').onWrite(event => {
const data = event.data.val();
var votesCount = admin.database().ref('/profiles/' + data.to).child('votes_count');
votesCount.once('value').then(function(snapshot) {
if (snapshot.val()) {
votesCount.set(snapshot.val() + data.rate);
} else {
votesCount.set(data.rate);
}
});
});
这是我正在使用的数据结构的方面:
{
profiles: [
userId: {
name: "...",
image: "...",
votes_count: "..."
},
...
],
votes: [
voteId: {
from: "userId",
to: "userId",
rate: n
},
...
]
【问题讨论】:
标签: javascript firebase google-cloud-functions