javascript - 如何按包含对象的值搜索 firebase 数据库?

标签 javascript firebase firebase-realtime-database

我有一个具有以下结构的 firebase 数据库

 ref
  |
  |-- rooms
  |    |
  |    .-- LUUZxjzhMQ9xf7d2-lU
  |          |
  |          seats
  |             |
  |             |-- east: 'frank'
  |             |-- north: 'mike'
  |             |-- south: 'john'
  |             |-- west: 'sam'

Firebase structure

我正在尝试删除节点 north:'mike'

我知道我可以使用

var db = firebase.database().ref('rooms/LUUZxjzhMQ9xf7d2-lU/seats/north');
db.remove();

但问题是 mike 不一定与 north 组合。他可能在西。所以我必须搜索包含 mike 作为值的节点,然后将其删除。

我想不出搜索 firebase 数据库以执行 .remove() 函数的正确方法。

PS:我的代码中已经引用了对象 ID LUUZxjzhMQ9xf7d2-lU。所以我只需要搜索 seats 级别。

这是我尝试过的:

var db = firebase.database().ref();
var path = 'rooms/LUUZxjzhMQ9xf7d2-lU/seats';
db.child(path).orderByChild('seats').equalTo('mike').remove();

那没有用。所以我尝试了:

var db = firebase.database().ref();
var path = 'rooms/LUUZxjzhMQ9xf7d2-lU';
db.child(path).orderByChild('seats').equalTo('mike').remove();

那也没用。

我做错了什么?

最佳答案

您需要使用 orderByValue 并使用 DataSanpshot 删除 child :

var db = firebase.database().ref();
var path = 'rooms/LUUZxjzhMQ9xf7d2-lU/seats';
db.child(path).orderByValue().equalTo('mike').once('value')
  .then(snapshot => {
    snapshot.forEach(childSnapshot => {
      db.child(path + '/' + childSnapshot.ref.key).remove();
    });
  });

这将删除所有具有 mike 值的 child 。

关于javascript - 如何按包含对象的值搜索 firebase 数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53913088/

相关文章:

javascript - 改变形式的多个部分

javascript - jQuery 巨型菜单显示一些连接速度较慢的 block 。如何修复它?

node.js - 提供 firebase 功能总是说端口未打开

node.js - Firebase 函数在 Function.MapValues 处返回 RangeError

javascript - 将文件从 android_asset 文件夹复制到 SD 卡

javascript - 改变事件页面的颜色(分页)

java - 如何查询字符串列表而不是单个字符串并从 Firestore 获取结果列表

ios - 在 iOS 上自定义 session_start 事件参数

Javascript : Save JSON data to firebase database

javascript - 如何从 firebase 检索所有数据。当前的 getData() 函数只获取一个对象