我有一个具有以下结构的 firebase 数据库
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
不一定与 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/