我在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未定义"
答案 0 :(得分:50)
您可以使用任何ref对象的函数key()
获取密钥
在Firebase的JavaScript SDK中有两种方法可以调用
push
。
使用
push(newObject)
。这将生成一个新的推送ID,并在具有该ID的位置写入数据。- 醇>
使用
push()
。这将生成一个新的推送ID并返回对具有该ID的位置的引用。这是纯客户端 操作了解#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)
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这样
获取最后插入的项目IDlet 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'没有兼容的呼叫签名"。
话虽如此,我在这个新版本中提到了我的案例:
答案 5 :(得分:0)
这对我有用:
var insertData = firebase.database().ref().push(newData);
var insertedKey = insertData.getKey(); // last inserted key