Javascript 使用react native向firebase中特定id的对象添加多个数据
我有一个firebase实时数据库,其结构如下: 您可以看到只有一个用户名为“hgjfj”的用户,我想使用react native在每个理发师的同一队列对象中添加另一个用户 这是添加数据的功能:Javascript 使用react native向firebase中特定id的对象添加多个数据,javascript,firebase,react-native,firebase-realtime-database,Javascript,Firebase,React Native,Firebase Realtime Database,我有一个firebase实时数据库,其结构如下: 您可以看到只有一个用户名为“hgjfj”的用户,我想使用react native在每个理发师的同一队列对象中添加另一个用户 这是添加数据的功能: NewBooking() { var queue = { userName: 'gfdgdfg', userPhone: 54535 } firebase.database().ref('Barbers/').push({ queue: queue
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的队列上您当前的
队列
根本不是队列,而是具有一对属性的单个对象。如果要为每个理发师存储对象列表,则queue
应该是一个集合
要将这样一个对象添加到每个barber的队列中,首先需要读取所有barber,然后循环结果,最后将该对象添加到每个队列中 大概是这样的:
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: { ... }
}
您当前的
队列
根本不是一个队列,而是一个具有一对属性的单个对象。如果要为每个理发师存储对象列表,则queue
应该是一个集合
要将这样一个对象添加到每个barber的队列中,首先需要读取所有barber,然后循环结果,最后将该对象添加到每个队列中 大概是这样的:
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: { ... }
}
非常感谢您的精彩和清晰的解释,但我对UIDofBarber有疑问,我如何才能获得它,这样我就可以知道ID并使用简单的代码,而不是冗长的代码?当你说UID时,你是指“LWC312750NY35f3YKEL”,比如你在数据库的图像中看到的,还是指另一个id,我应该为每个理发师添加一个新的对象,就像我为他们添加名称和评级时一样@Frank van PuffelenI说,
ID
或UID
,因为理发师使用的按键是通过调用push()
生成的。你通常会知道它,因为它是用户点击的东西。如果你的理发师是应用程序的实际用户,你应该使用Firebase身份验证让他们登录,然后使用他们的UID作为密钥,而不是使用push()
。非常感谢您的精彩和清晰的解释,但我对UIDofBarber有疑问,我如何才能获得它,以便知道ID并使用简单的代码,而不是冗长的代码?当你说UID时,你是指“LWC312750NY35f3YKEL”,比如你在数据库的图像中看到的,还是指另一个id,我应该为每个理发师添加一个新的对象,就像我为他们添加名称和评级时一样@Frank van PuffelenI说,ID
或UID
,因为理发师使用的按键是通过调用push()
生成的。你通常会知道它,因为它是用户点击的东西。如果你的理发师是应用程序的实际用户,你应该使用Firebase身份验证让他们登录,然后使用他们的UID作为密钥,而不是使用push()
。