javascript - 移动节点后,从 prevRef 到 newRef 如何更新 Firebase 内的特定数据?

标签 javascript firebase firebase-realtime-database

我使用下面的代码将特定数据从 ('Pending') 节点复制到 ('Approved') 节点。它仅复制包含数据的usernamerequest_status 的节点。复制后如何更新 userid 内的 request_status

var oldRef = firebase.database().ref().child('Request').child('Pending');
var newRef = firebase.database().ref().child('Request').child('Approved');

function moveFbRecord(oldRef, newRef) {    
 oldRef.once('value', function(snap)  {
      newRef.update( snap.val(), function(error) {

           if( !error ) {  oldRef.remove();}
           else if( typeof(console) !== 'undefined' && console.error ) {  console.error(error); }
      });
 });    
newRef.limitTolast(1).update({ snap.val().request_status: "Approved" });<<< I tried inserting this code but I think it messes up every code in my .js file
}

我应该在哪里放置更新代码行?

newRef.limitTolast(1).update({ snap.val().request_status: "Approved" });

最佳答案

更新新节点中的状态:

oldRef.once('value', function(snap)  {
  var data = snap.val();
  data.request_status = "Approved";
  newRef.update(data, function(error) {
       if( !error ) {  oldRef.remove(); }
       else if( typeof(console) !== 'undefined' && console.error ) {  console.error(error); }
  });
}); 

您甚至可以将旧节点的删除和新节点的写入合并到一个多位置更新中。关键是您提供希望 Firebase 更新的所有数据的完整路径:

oldRef.once('value', function(snap)  {
  var data = snap.val();
  data.request_status = "Approved";
  var updates = {};
  updates["Request/Approved/"+snap.key] = data
  updates["Request/Pending/"+snap.key] = null;
  firebase.database().ref().update(updates);
}); 

此方法的重要优点是所有这些更新要么都成功,要么都不成功。因此,旧位置不可能有任何残留数据。

关于javascript - 移动节点后,从 prevRef 到 newRef 如何更新 Firebase 内的特定数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53511314/

相关文章:

javascript - 当鼠标悬停在 Firefox 中的嵌入式 iframe 上时防止父页面滚动

javascript - 即使对象不是在 JS 中创建的,对象原型(prototype)也会抛出错误

javascript - 如何使用 Tablesorter lib 创建自定义过滤器来搜索全表?

javascript - 如何检测浏览器是否兼容ES2015

ios - 为什么它会覆盖数据而不是在 firebase 中添加更多数据?

reactjs - 使用 Firebase Auth Context 在 React-Ionic 应用程序中保护路由

swift - Firebase ref.removeAllObservers() 是否也递归删除子观察者?

android - onSuccessListener中文件上传成功时如何返回 bool 值?

java - 在 ListView 中无法获取正确的数据

Javascript 创建帐户未链接到 Firebase 数据库