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 is not defined」です
Refオブジェクトのkey()
関数を使用してキーを取得できます
FirebaseのJavaScript SDKで
Push
を呼び出す方法は2つあります。
Push(newObject)
を使用します。これにより、新しいプッシュIDが生成され、そのIDを持つ場所にデータが書き込まれます。
Push()
を使用します。これにより、新しいプッシュIDが生成され、そのIDを持つ場所への参照が返されます。これは、純粋なクライアント側操作です。#2を知っていると、クライアント側で新しいPush 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);
}
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);
}
このような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));
.Push()は常にObservableを返します。上記のソリューションを適用すると、「タイプ 'String'には互換性のあるコール署名がありません」というエラーが発生しました。
そうは言っても、私はこの新しいバージョンで私のケースで何が機能したかを参照します:
これは私のために働いた:
var insertData = firebase.database().ref().Push(newData);
var insertedKey = insertData.getKey(); // last inserted key
こちらをご覧ください: firebaseでデータを保存します。