Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/432.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用react native向firebase中特定id的对象添加多个数据_Javascript_Firebase_React Native_Firebase Realtime Database - Fatal编程技术网

Javascript 使用react native向firebase中特定id的对象添加多个数据

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

我有一个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的队列上

您当前的
队列
根本不是队列,而是具有一对属性的单个对象。如果要为每个理发师存储对象列表,则
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()