Firebase JavaScript 检索动态创建的子密钥?



正在试验Firebase,并尝试获取正在动态添加的新添加的子项。如何检索: pi0usqkj16o ?

var availability = database.ref("games/setup");
availability.once("value", function(snapshot){
console.log(JSON.stringify( snapshot.val() ) );
}); 

snapshot.val()给了我以下内容:

{
"pi0usqkj16o":{
"player1":"ed",
"player1Choice":"",
"player1Wins":0,
"player2":"",
"player2Choice":"",
"player2Wins":0,
"total":0
},
"wpgnfq1swac":{
"player1":"ed",
"player1Choice":"",
"player1Wins":0,
"player2":"",
"player2Choice":"",
"player2Wins":0,
"total":0
}
}

最终目标是以动态创建并给定序列号名称的新创建的目录(子目录(为目标。 也许做这样的事情? var 名称 = pi0usqkj16o;database.ref("somefolder/" + name(;`

但是我如何能够仅将串行与返回的上述 JSON 隔离开来?

//App Code
//INITIALIZE FIREBASE
firebase.initializeApp(config);
var database = firebase.database();

var Methods = {
//Makes a new serial (ex. pi0usqkj16o)
function uniqueId(){
return Math.random().toString(36).substr(2, 16);
}
//checks if a game room is already available
initialCheck: function(callback){
var availability = database.ref("games/setup");
availability.once("value", function(snapshot){
//if there is no readily available room already created..create a new room 
if(snapshot.numChildren() < 1){
var gameName = uniqueId();
availability.update({
[gameName]: {player1: "ed", player2: "", player1Choice: "", player2Choice: "", player1Wins: 0, player2Wins: 0, total: 0}
});
}
else{
var room = snapshot.key;
// Need to find the room name to be able to assign it to the user.
console.log("room is: " + room );
}
});
}

为了获得该 EXACT 密钥,其中必须有一些您可以轻松引用的唯一数据。这里有一个想法:

{
"pi0usqkj16o":{
"player1":"ed",
"player1Choice":"",
"player1Wins":0,
"player2":"",
"player2Choice":"",
"player2Wins":0,
"total":0,
"gameNumber":1
},
"wpgnfq1swac":{
"player1":"ed",
"player1Choice":"",
"player1Wins":0,
"player2":"",
"player2Choice":"",
"player2Wins":0,
"total":0,
"gameNumber":2
}
}

我已经在你的数据中添加了一个"游戏编号",应该在每场比赛后取消。现在要获取确切的密钥:

firebase.database().ref('games/setup').once("value", function(snapshot){
var data = snapshot.val();
if (data && snapshot.child('gameNumber').val() === '1'){
console.log(snapshot.key);
} else {
console.log("no data"); 
}
});

这应该返回您要查找的密钥。当然,您需要坐下来考虑一种重新构建数据的方法,以便进行这样的查询。

也读一读: https://firebase.google.com/docs/reference/js/firebase.database.DataSnapshot

最新更新