電子メールアドレスでusers
配列を照会し、ユーザーのアカウント情報を返すことができます。
users.orderByChild('email').equalTo(authData.user.email).once('value').then(function(snapshot) {
console.log(snapshot.val());
console.log(snapshot.key); // 'users'
console.log(snapshot.child('email').key); 'email'
...
キー(-KiBBDaj4fBDRmSS3j0r
)を取得するにはどうすればよいですか。 snapshot.key
はusers
を返します。 snapshot.child('email').key
はemail
を返します。キーは子ではないように見えます。つまり、users
とemail
の間にあるように見えます。
次のようなことができます:
var key = Object.keys(snapshot.val())[0];
参照: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/keys
Object ...まあ)。
リアルタイムデータベース:
このために、簡単に使用できます:snapshot.key
スナップショット= firebase.database.DataSnapshot
this.app.database()
.ref('/data/')
.on('value', function(snapshot) {
const id = snapshot.key;
//----------OR----------//
const data = snapshot.val() || null;
if (data) {
const id = Object.keys(data)[0];
}
});
Firestore:
snapshot.id
スナップショット= firebase.firestore.DocumentSnapshot
this.app.firestore()
.collection('collection')
.doc('document')
.onSnapshot(function(snapshot) {
const id = snapshot.id;
//----------OR----------//
const data = snapshot.data() || null;
if (data) {
const id = Object.keys(data)[0];
}
});
Camden_kidと同様に、Object.keys(arr)
を使用しましたが、次の3行です。
var arr = snapshot.val();
var arr2 = Object.keys(arr);
var key = arr2[0];
console.log(key) // -KiBBDaj4fBDRmSS3j0r
users.orderByChild('email').equalTo(authData.user.email)
は、クエリ( doc )であり、「1つ以上のフィルターメソッドを連結する」ことで作成しました。クエリで少し具体的なのは、equalTo(authData.user.email)
でクエリを実行するため、1つの子のみでdataSnapshotを返すことです。
here で説明したように、この正確なケースでは、forEach()
で返されたdataSnapshotをループする必要があります。
値オブザーバーをデータのリストにアタッチすると、データのリスト全体が単一のスナップショットとして返され、個々の子にアクセスするためにループオーバーできます。
クエリに一致するものが1つしかない場合でも、スナップショットはリストのままです;単一のアイテムが含まれているだけです。アイテムにアクセスするには、次のように結果をループ処理する必要があります:
ref.once('value', function(snapshot) { snapshot.forEach(function(childSnapshot) { var childKey = childSnapshot.key; var childData = childSnapshot.val(); // ... }); });
スナップショットキーに基づいてデータを取得する新しい方法を見つけました-
firebase.database().ref('events').once('value',(data)=>{
//console.log(data.toJSON());
data.forEach(function(snapshot){
var newPost = snapshot.val();
console.log("description: " + newPost.description);
console.log("interest: " + newPost.interest);
console.log("players: " + newPost.players);
console.log("uid: " + newPost.uid);
console.log("when: " + newPost.when);
console.log("where: " + newPost.where);
})
})