在Firebase中使用push()时如何在数据库中获取唯一ID和存储

时间:2016-08-04 13:22:30

标签: javascript reactjs firebase firebase-realtime-database

我在firebase中推送数据,但我想在我的数据库中存储唯一的id。 有人可以告诉我,如何推送具有唯一ID的数据。

我正在尝试这样

  writeUserData() {
    var key= ref.push().key();
    var newData={
        id: key,
        websiteName: this.webname.value,
        username: this.username.value,
        password : this.password.value,
        websiteLink : this.weblink.value
    }
    firebase.database().ref().push(newData);
  }

错误是" ReferenceError:ref未定义"

6 个答案:

答案 0 :(得分:50)

您可以使用任何ref对象的函数key()获取密钥

  

在Firebase的JavaScript SDK中有两种方法可以调用push

     
      
  1. 使用push(newObject)。这将生成一个新的推送ID,并在具有该ID的位置写入数据。

  2.   
  3. 使用push()。这将生成一个新的推送ID并返回对具有该ID的位置的引用。这是纯客户端   操作

  4.         

    了解#2,您可以轻松地获得一个新的推送ID客户端:

    var newKey = ref.push().key();
    
         

    然后,您可以在多地点更新中使用此密钥。

https://stackoverflow.com/a/36774761/2305342

  

如果您在没有参数的情况下调用Firebase push()方法,那么它就是一个   纯粹的客户端操作。

var newRef = ref.push(); // this does *not* call the server
     

然后,您可以将新参考的key()添加到您的项目中:

var newItem = {
    name: 'anauleau'
    id: newRef.key()
};
     

并将该项目写入新位置:

newRef.set(newItem);

https://stackoverflow.com/a/34437786/2305342

在你的情况下:

writeUserData() {
  var myRef = firebase.database().ref().push();
  var key = myRef.key();

  var newData={
      id: key,
      Website_Name: this.web_name.value,
      Username: this.username.value,
      Password : this.password.value,
      website_link : this.web_link.value
   }

   myRef.push(newData);

}

答案 1 :(得分:26)

Firebase v3 Saving Data

function writeNewPost(uid, username, picture, title, body) {
  // A post entry.
  var postData = {
    author: username,
    uid: uid,
    body: body,
    title: title,
    starCount: 0,
    authorPic: picture
  };

  // Get a key for a new Post.
  var newPostKey = firebase.database().ref().child('posts').push().key;

  // Write the new post's data simultaneously in the posts list and the user's post list.
  var updates = {};
  updates['/posts/' + newPostKey] = postData;
  updates['/user-posts/' + uid + '/' + newPostKey] = postData;

  return firebase.database().ref().update(updates);
}

答案 2 :(得分:3)

您可以使用Promise这样

获取最后插入的项目ID
let postRef = firebase.database().ref('/post');
postRef.push({ 'name': 'Test Value' })
    .then(res => {
        console.log(res.getKey()) // this will return you ID
    })
    .catch(error => console.log(error));

答案 3 :(得分:1)

  

尝试一下。它对我有用

this.addressRef.push(addressObj).then(res => {
    console.log("address key = " + res.key) ;
});

此处res.getKey()无效,但使用res.key获取最新的推送ID

答案 4 :(得分:0)

现在看起来像.push()总是返回一个Observable。当应用上述解决方案时,我遇到以下错误:"键入' String'没有兼容的呼叫签名"。

话虽如此,我在这个新版本中提到了我的案例:

Type 'String' has no compatible call signatures

答案 5 :(得分:0)

这对我有用:

 var insertData = firebase.database().ref().push(newData);
 var insertedKey = insertData.getKey(); // last inserted key

见这里:Saving data with firebase.