Firebase更新顶级值

时间:2017-03-06 15:51:53

标签: 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
}

这简单地将“total”的值替换为100,但是每次发生某事时我都想添加1。我意识到在这里我不是首先检索“total”的值,这是我问题的一部分,我也很难获得这个值..

firebase.database().ref().update({
 total: + 100
                });

我的其他计数器看起来像这样,并且很好地更新了其他嵌套值:

firebase.database().ref('products/' + product.id).update({
 postCount: product.postCount + 1,
 viewCount: product.viewCount + 1

                });

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

每当您递增此类属性的值时,您应该使用事务。因为当两个用户具有该属性的不同本地值时,一个更新将覆盖另一个。此外,它将帮助您获得该属性的当前值。

我认为这段代码可以做你想要的。

firebase.database().ref('total').transaction(function(value) {
  if (value) {
    value++;
  }
  return value;
});

您可以在此处阅读交易: Firebase Transactions