我正在尝试更新我的 firebase 数据库中的计数器记录,当数据嵌套时我可以很好地更新,但是,如果“total”的值位于顶层,我在更新它时遇到问题。
JSON:
{
"accounts" : {
"-KRPSyO4B48IpBnHBTYg" : {
"dateCreated" : "",
"email" : "",
"provider" : "",
"userId" : ""
}
},
"products" : {
"-KUKRafaNurpFhGF4jQa" : {
"dateCreated" : "",
"description" : "",
"imageUrl" : "",
"lastUpdated" : "",
"name" : "",
"postCount" : -1,
"tags" : [ "Tag" ],
"url" : "",
"viewCount" : 10,
}
},
"total" : 1
}
这只是用 100 替换“total”的值,但是我想每次发生事情时都加 1。我意识到在这里我没有首先检索“总计”的值,这是我的问题的一部分,我也无法获取该值..
firebase.database().ref().update({
total: + 100
});
我的其他计数器看起来像这样,并且很好地更新其他嵌套值:
firebase.database().ref('products/' + product.id).update({
postCount: product.postCount + 1,
viewCount: product.viewCount + 1
});
预先感谢您的帮助!
最佳答案
每当您增加这样的属性值时,您都应该使用事务。因为当两个用户对该属性具有不同的本地值时,一个更新将覆盖另一个。此外,它将帮助您获取该属性的当前值(value)。
我认为这段代码应该满足您的要求。
firebase.database().ref('total').transaction(function(value) {
if (value) {
value++;
}
return value;
});
您可以在此处阅读有关交易的内容: Firebase Transactions
关于javascript - Firebase 更新顶级值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42629940/