Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Firebase云功能-更新节点_Javascript_Node.js_Firebase_Firebase Realtime Database_Google Cloud Functions - Fatal编程技术网

Javascript Firebase云功能-更新节点

Javascript Firebase云功能-更新节点,javascript,node.js,firebase,firebase-realtime-database,google-cloud-functions,Javascript,Node.js,Firebase,Firebase Realtime Database,Google Cloud Functions,我在我的应用程序中使用Firebase云功能来统计喜欢的用户。 我有一个类似的节点,当用户喜欢视频时,它会保存他的ID和一个布尔参数(true) 这里是示例 在Firebase云函数中,我监听该节点,当添加新的like时,它会计算like。 正如你所看到的“喜欢:3” 云功能代码-更新计数器 exports.countlikechange = functions.database.ref('/likes/{postid}/{userUID}').onWrite(event => {

我在我的应用程序中使用Firebase云功能来统计喜欢的用户。 我有一个类似的节点,当用户喜欢视频时,它会保存他的ID和一个布尔参数(true)

这里是示例

在Firebase云函数中,我监听该节点,当添加新的like时,它会计算like。 正如你所看到的“喜欢:3”

云功能代码-更新计数器

   exports.countlikechange = functions.database.ref('/likes/{postid}/{userUID}').onWrite(event => {
const collectionRef = event.data.ref.parent;    
console.log(collectionRef);

const countRef = collectionRef.child('likes');


// Return the promise from countRef.transaction() so our function 
// waits for this async event to complete before it exits.
return countRef.transaction(current => {
  if (event.data.exists() && !event.data.previous.exists()) {
    return (current || 0) + 1;
  }
  else if (!event.data.exists() && event.data.previous.exists()) {
    return (current || 0) - 1;
  }
}).then(() => {
  console.log('Counter updated.');
   });
 });
该方法侦听“likes”节点,当孩子添加该节点时,它触发该方法并更新每个videoID上的“likes:…”

我要做的是首先更新其他节点中的计数器

在该节点上,我还想更新计数器

我的问题是,我不知道如何获取对该节点的引用。 在“HipHop”节点上,视频被保存,每个视频都保存在他的ID下

如何从云函数引用到该节点并更新“likes”

编辑 另外,如何从正在侦听的节点检索数据


例如,我正在收听“likes”节点,我想检索该节点中刚刚更新的数据。

您可以这样写:

exports.countlikechange = functions.database.ref('/likes/{postid}/{userUID}').onWrite(event => {
const collectionRef = event.data.ref.parent;
const countRef = collectionRef.child('likes');
  const promises = [];
  if (event.data.exists() && !event.data.previous.exists()) {
    const promisseadd1 = countRef.transaction(current => {
      return (current || 0) + 1;
    });
    const promisseadd2 = admin.database().ref(`/enter/here/new/path/likes`).transaction(current => {
      return (current || 0) + 1;
    });
    return Promise.all([promisseadd1, promisseadd2]);
  } else if (!event.data.exists() && event.data.previous.exists()) {
    const promissesubs1 = countRef.transaction(current => {
      return (current || 0) - 1;
    });
    const promissesubs2 = admin.database().ref(`/enter/here/new/path/likes`).transaction(current => {
      return (current || 0) - 1;
    });
    return Promise.all([promissesubs1, promissesubs2]);
  }
});

混合具有静态和动态属性的对象是一个坏主意。你有没有建议把它写对?因为视频的键和喜欢的键是一样的,只需获取视频的键,然后使用它来获取喜欢的对象,还有其他问题吗?你知道如何获取视频的键吗?我的意思是我应该用JavaScript写些什么来获取密钥?