2016-06-09 37 views
2

有人可以请解释我为什么Firebase以' - '开头的唯一ID吗?如何从push()firebase中拉ID?

我有两个问题:

我怎样才能从推ID,如果有任何回报这个要求吗?

firebase.database().ref('carts/-KJp9LdQkEN1DtuCLjfP/pro').push({ 
    name:name, 
    amount:am 
}); 

在这部分我试图处理回调快照。我所有从这个json中提取数据的尝试都失败了。

JSON.parse(data) == error 
snapshot.key(); == error 
data[0] == error 

firebase.database().ref('carts/').on('value', function(snapshot) { 
    var data = snapshot.val(); 
    console.log(data); 
}); 

回答

4

这些键(通常称为“推IDS”)与-开始,因为这是在用于生成它们的字典中的第一个字符。看到这个blog post explaining how they are generated

如果你试图让你添加一个项目的推号,可以是这样做的:

var newRef = firebase.database().ref('carts/-KJp9LdQkEN1DtuCLjfP/pro').push(); 
console.log(newRef.key); 
newRef.set({ 
    name:name, 
    amount:am 
}); 

如果你想确定在监听项目的关键,你可以是这样做的:

firebase.database().ref('carts/').on('value', function(snapshot) { 
    console.log(snapshot.key); // carts 
    var data = snapshot.val(); 
    console.log(data); 
}); 

更有可能的是,如果你在听孩子,你会得到这个关键:

firebase.database().ref('carts/').on('child_added', function(snapshot) { 
    console.log(snapshot.key); // -KJ.... 
    var data = snapshot.val(); 
    console.log(data); 
}); 

或者是这样的:

firebase.database().ref('carts/').on('value', function(snapshot) { 
    snapshot.forEach(function(cartSnapshot) { 
    console.log(cartSnapshot.key); // -KJ.... 
    console.log(cartSnapshot.val()); 
    }); 
}); 
+0

非常感谢你!第一个解决方案确实可以完美工作! 虽然第二只是给位置,就像在这个例子中我得到“推车” –

+0

这是正确的。如果您正在倾听孩子(例如,使用'child_added'),您可以通过'snapshot.key'获得每个孩子的密钥。我会添加更多的代码。 –

+0

@FrankvanPuffelen请纠正语法错误console.log(cartSnapshot.val();),你能告诉我如何获得只有一个孩子的价值 - 我不想迭代所有的孩子! –