使用自定义键保存数据

时间:2019-01-15 16:02:18

标签: javascript firebase firebase-realtime-database

数据库参考:

example of problem

我正在尝试将数据保存到firebase实时数据库中,我需要我的密钥作为用户ID,而不是我尝试过的孩子生成的随机生成的唯一密钥,但仍然可以获得一些随机密钥有什么帮助吗?这是我目前拥有的方法

async componentWillMount() {


const {data} = await Contacts.getContactsAsync({
  fields: [Contacts.Fields.PhoneNumbers],
});

this.setState({dataSource: data.map(contact => ({...contact, key: contact.number}))});

const contacts = data.filter(d => d.phoneNumbers);

contactsToUpload.forEach(contact => {
  const number = contact.phoneNumbers[0].number.replace(/\D/g, '');
  const ref = firebase.database().ref('/Contacts/' + number);
  try {
    ref.push(contact.name);
  } catch (error) {
    console.log(error);
  }
});
}
//Currently have
"Contacts" : {
  "5554787672" : {
    "-LWIlxwIETK5UR3O5GkR" : "Daniel Higgins Jr.",
    "-LWImsOurEVDOE-KrkVw" : "Daniel From School"
 }
//Needed
"Contacts" : {
 "5554787672" : {
  "UserId1" : "Daniel Higgins Jr.",
  "UserId2" : "Daniel From School"
 }

2 个答案:

答案 0 :(得分:0)

每次调用push()时,Firebase都会生成对数据库中新的唯一位置的引用。因此,ref.push()ref下创建了一个新的唯一位置。

如果您只想在联系人的ID下设置姓名,请将ref.push(contact.name);更改为:

ref.set(contact.name);

答案 1 :(得分:0)

db.ref('UsersList/').child('name you want to use').set({
    email:this.state.email,
    fname: this.state.lastname,
    lname: this.state.firstname,
}).then((data)=>{
    //success callback
    alert('success'+data);
}).catch((error)=>{
    //error callback
    alert('failed'+error);
  })

类似的东西对我有用,我能够根据所需的特殊用户名进行存储。