【问题标题】:delete entire record which is associated with a certain child value删除与某个子值关联的整个记录
【发布时间】:2020-02-16 19:04:47
【问题描述】:

我想使用输入的子值删除数据库中的整条记录 这是我尝试过的代码

<body>

   User Name: 
   <input type="text" name="user_name" id="user_name" placeholder="enter text"/><br><br>
   Enter Email:
  <input type="text" name="user_name" id="user_name2" placeholder="enter email" />

<br><br>


    <input type="button" value="Save" onclick="save_user();" />
    <input type="button" value="delete" onclick="delete_user();" />

<script>

  var tblUsers = document.getElementById('tbl_users_list');
  var databaseRef = firebase.database().ref('users/');
  var rowIndex = 1;
  var uid;
  var childKey;
  var childData;

  databaseRef.once('value', function(snapshot) {
    snapshot.forEach(function(childSnapshot) {
    childSnapshot.key;
    childSnapshot.val();

   var row = tblUsers.insertRow(rowIndex);
   var cellId = row.insertCell(0);
   var cellName = row.insertCell(1);
   cellId.appendChild(document.createTextNode(childKey));
   cellName.appendChild(document.createTextNode(childData.user_name));
   cellName.appendChild(document.createTextNode(childData.user_name2));

   rowIndex = rowIndex + 1;


    });
  });


  function save_user(){
   var user_name = document.getElementById('user_name').value;
   var user_name2 = document.getElementById('user_name2').value;

   uid = firebase.database().ref().child('users').push().key;

   var data = {
    user_id: uid,
    user_name: user_name,
    password: user_name2
   }

   var updates = {};
   updates['/users/' + uid] = data;
   firebase.database().ref().update(updates);

   alert('The user is created successfully!');
   reload_page();

   document.writeln(uid);


  }

  function update_user(){
   var user_name = document.getElementById('user_name').value;
   var user_id = document.getElementById('user_id').value;

   var data = {
    user_id: user_id,
    user_name: user_name
   }

   var updates = {};
   updates['/users/' + user_id] = data;
   firebase.database().ref().update(updates);

   alert('The user is updated successfully!');

   reload_page();
  }

  function delete_user(){
   var user_id = document.getElementById('user_id').value;

   firebase.database().ref().child('/users/' + user_id).remove();
   alert('The user is deleted successfully!');
   reload_page();
  }

这里要引用和删除的子值是user_name2

我想要从这段代码中删除与其关联的子值的记录

我的数据库看起来像

例如,我想删除与子名密码“ddd”关联的整个记录​​

【问题讨论】:

  • 你在做 document.getElementById('user_id').value,但据我所知,你的 HTML 中没有元素 user_id
  • 我还没有上传完整代码

标签: javascript html firebase firebase-realtime-database


【解决方案1】:

Firebase 只有在知道该节点的完整、准确路径时才能写入该节点。如果您只知道节点的属性值,则首先需要执行查询以找到具有该值的节点,然后写入这些节点。

所以在你的情况下是这样的:

let password = "ddd"; // hard-coded value, but this could also be read from the HTML

let ref = firebase.database().ref("users");
let query = ref.orderByChild("password").equalTo(password);

query.once("value").then(function(results) {
  results.forEach(function(snapshot) {
    snapshot.ref.remove();
  })
})

【讨论】:

  • 编译时的代码说snapshot.ref不是函数我应该做什么修改?
  • 对,它是一个属性。对不起,我更新了我的答案。对于这样一个简单的错误,请务必查看参考文档以了解它可能是什么。 firebase.google.com/docs/reference/js/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-26
  • 2011-04-29
  • 1970-01-01
  • 2022-06-15
  • 1970-01-01
  • 1970-01-01
  • 2021-11-14
相关资源
最近更新 更多