我有一个firebase实时数据库,它的结构如下:
您会看到只有一个用户名为“ hgjfj”,并且我想使用react native在每个理发师的同一队列对象中添加另一个用户
这是添加数据的功能:
NewBooking() {
var queue = { userName: 'gfdgdfg', userPhone: 54535 }
firebase.database().ref('Barbers/').push({
queue: queue
}).then((data) => {
//success callback
console.log('data ', data)
}).catch((error) => {
//error callback
console.log('error ', error)
})
}
是否有一种方法可以通过firebase获取生成的ID,例如获取LWC312750NY35f3YKEL并将新用户推送到该ID的队列中
答案 0 :(得分:1)
您当前的queue
根本不是队列,而是具有一对属性的单个对象。如果要存储每个理发师的对象列表,则queue
应该是一个集合。
要将这样的对象添加到每个理发师的队列中,您首先需要读取所有理发师,然后遍历结果,最后将对象添加到每个队列中。
类似这样的东西:
var newItem = { userName: 'gfdgdfg', userPhone: 54535 }
firebase.database().ref('Barbers').once('value').then(function(snapshot) {
snapshot.forEach(function(barberSnapshot) {
barberSnapshot.child('queue').ref.push(newItem);
});
});
如果知道要添加队列的理发师的ID,则代码可以简单很多:
var newItem = { userName: 'gfdgdfg', userPhone: 54535 }
firebase.database().ref('Barbers/UIDofBarber/queue').push(newItem);
如果您想清除每个理发师的队列,以摆脱那里现在存在的有问题的物体,
firebase.database().ref('Barbers').once('value').then(function(snapshot) {
snapshot.forEach(function(barberSnapshot) {
barberSnapshot.child('queue').ref.remove();
});
});
顺便说一句,您违反了Firebase文档中的一项建议,即保持数据结构平坦。现在,上面的代码需要读取有关每个理发师和的元数据,而实际上只需要访问队列。我建议创建顶级集合:一个用于每个理发师的元数据,另一个用于其队列:
barbers
barberUID1: { ... }
barberUID2: { ... }
queues
barberUID1: {
queuePushID11: { ... }
queuePushID12: { ... }
}
barberUID2: {
queuePushID21: { ... }
queuePushID22: { ... }
}