使用react native

时间:2019-01-14 17:56:28

标签: javascript firebase react-native firebase-realtime-database

我有一个firebase实时数据库,它的结构如下:

enter image description here

您会看到只有一个用户名为“ 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的队列中

1 个答案:

答案 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: { ... }
  }