Firebase功能-计算子项并更新条目

时间:2018-07-02 19:32:51

标签: javascript firebase firebase-realtime-database google-cloud-functions

我一直试图使用Firebase Functions编写一个简单的方法,但是我不熟悉JS。

下面是我的实时数据库的结构

  

-景点

     

--- is_hidden:假

     

---喜欢

     

------ like_id_1:是

     

---不喜欢

     

------ dislike_id_1:是

我正在尝试编写一种执行以下操作的简单方法:每当将条目添加到不喜欢时,都要计算喜欢和不喜欢的次数。

  

如果不喜欢的次数大于(喜欢+ 5)的次数,   将is_hidden的值更改为true

这是我解决问题的尝试

exports.checkHiddenStatus = functions.database.ref('/spots/{spotid}').onWrite(
    (change, context) => {
      const collectionRef = change.after.ref;
      const isHiddenRef = collectionRef.child('is_hidden');
      const likesRef = collectionRef.child('likes');
      const dislikesRef = collectionRef.child('dislikes');


      if(isHiddenRef.before.val()) return;

      let likeCount = likesRef.numChildren();
      let dislikeCount = dislikesRef.numChildren();

      let isHidden = false;

      if( dislikeCount >= (likeCount + 5))
          isHidden = true;

      if(!isHidden) return;

      // Return the promise from countRef.transaction() so our function
      // waits for this async event to complete before it exits.
      return isHiddenRef.transaction((current) => {
        return isHidden;
      }).then(() => {
        return console.log('Counter updated.');
      });
    });

可悲的是,由于我没有JS的经验,所以我一直陷在我不理解的错误消息中。最近的人

  

TypeError:无法读取未定义的属性“ val”       在exports.checkHiddenStatus.functions.database.ref.onWrite(/user_code/index.js:28:28)

有人可以帮我编写此功能吗?谢谢!

1 个答案:

答案 0 :(得分:2)

您似乎正在尝试将数据库Reference对象视为Change对象。更改具有beforeafter属性,但引用没有。

如果您有数据库引用对象,并且想要该位置的数据库值,则需要使用其once()方法对其进行查询。

使用Admin SDK阅读有关readingwriting数据的更多信息。

相关问题