首页 > 解决方案 > 使用本机反应将多个数据添加到firebase中特定ID的对象

问题描述

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

标签: javascriptfirebasereact-nativefirebase-realtime-database

解决方案


您的 currentqueue根本不是队列,而是具有一对属性的单个对象。如果要存储每个理发师的对象列表,那么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: { ... }
  }

推荐阅读