如何通过包含对象的值搜索Firebase数据库?

时间:2018-12-24 11:54:14

标签: javascript firebase firebase-realtime-database

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

group by

Firebase structure

我正在尝试删除节点 ref | |-- rooms | | | .-- LUUZxjzhMQ9xf7d2-lU | | | seats | | | |-- east: 'frank' | |-- north: 'mike' | |-- south: 'john' | |-- west: 'sam'

我知道我可以使用

north:'mike'

但是问题是var db = firebase.database().ref('rooms/LUUZxjzhMQ9xf7d2-lU/seats/north'); db.remove(); 不一定与mike结合使用。他可能位于northeastwest。因此,我必须搜索包含south作为值的节点,然后将其删除。

我无法提出搜索firebase数据库以执行mike函数的正确方法。

PS:我已经在代码中引用了对象ID .remove()。因此,我只需要搜索LUUZxjzhMQ9xf7d2-lU级别。

这是我尝试过的:

seats

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

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

那也不起作用。

我在做什么错了?

1 个答案:

答案 0 :(得分:1)

您需要使用orderByValue并使用DataSanpshot删除一个或多个子代:

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作为值的子级。