javascript - Firebase 更新顶级值

标签 javascript firebase firebase-realtime-database

我正在尝试更新我的 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/

相关文章:

javascript - 访问全局变量和异步问题

javascript - 滚动对话框主体但不滚动其下方的页面

javascript - 为什么添加 console.log 语句可以防止测试超时?

带有自定义 UITableViewCell 的 iOS FirebaseUI

android - Flutter firebase_messaging android 应用程序在 .getToken() 调用时崩溃

ios - 我是否应该始终在 viewDidDisappear() 中删除 Firebase 监听器?

javascript - 如何在文档中的所有其他内容之前插入一个元素?

java - 如何获取用户id以在android studio中执行显示列表以供管理员查看订单列表?

ios - Firebase ios 快照为 .childRemoved 返回 null

json - Firebase 中的三向关系