【问题标题】:firebase.database.ref("...").set({}) creates a new object instead of updating the existing one.firebase.database.ref("...").set({}) 创建一个新对象,而不是更新现有对象。
【发布时间】:2019-03-12 04:50:57
【问题描述】:

我正在为我网站上的帖子建立一个喜欢/不喜欢的系统。每次用户点击赞按钮时,数据库中的赞数都会更新。存储在数据库中的对象以图片的url、类别和点赞数作为键。

以下是我的更新代码:likeButton(img) 是一个函数,当用户单击like 按钮时会调用它。

likedButton(img) {
    var url = img.src;
    var x = this.db.list('/userPosts',

  ref => ref.orderByChild('url').equalTo(url));


  x.snapshotChanges().subscribe(

    (datas) => { 
      var keys  = datas[0]['key'];
      var obj = x.valueChanges().subscribe((z) => {
        var n = z[0]['likes'];
        n++;
        console.log(n);
        firebase.database().ref('/userPosts'+keys+'/likes').set({
          'likes' : n
      });


      });

    });
  }
}

我希望更新“喜欢”的现有值。但是函数以创建新对象结束。

【问题讨论】:

  • 你说“作为它的key”,是key里面的like数吗?
  • @LasseVågsætherKarlsen 我在数据库中的对象是:{key: " ", likes: " " , url: " " ,category: " "}
  • 您确定要更新的网址不是/userPosts/key吗?为什么likes 是引用的一部分?

标签: typescript firebase firebase-realtime-database angularfire2


【解决方案1】:

您应该使用 update 代替,因为在对象上调用 set 将完全替换它或创建新记录(如果不存在)

firebase.database().ref('/userPosts'+keys+'/likes').update({ 'likes' : n})

【讨论】:

  • 您的 '/userPosts'+keys+'/likes' 丢失/...尝试 firebase.database().ref('/userPosts/'+keys+'/likes').update({ “喜欢”:n})
猜你喜欢
  • 2017-02-25
  • 1970-01-01
  • 2015-07-26
  • 2015-02-02
  • 1970-01-01
  • 2018-05-09
  • 1970-01-01
  • 1970-01-01
  • 2017-04-12
相关资源
最近更新 更多