推送到firebase数据库时如何设置推送键?

时间:2017-10-26 15:58:38

标签: node.js angular firebase firebase-realtime-database google-cloud-functions

当我从前端(Angular 4)和后端(firebase函数)向firebase数据库写入数据时,firebase会生成一个推送密钥。使用此密钥,我将来无法访问数据,因为密钥是唯一的。我想知道我可以自己设置密钥的任何方式,或者我可以在不知道密钥的情况下访问数据?

这是我的前端代码:

this.db.list(`${this.basePath}/`).push(upload);


这是我后端的代码:

admin.database().ref('/messages').push({original: original}).then(function (snapshot) {
res.redirect(303, snapshot.ref);}); 

我推送的所有数据都将在path / pushID / data

simple image

我不知道pushID就无法访问数据。
我想要的最好的情况是路径/我自己的pushID / data

非常感谢你的帮助!!

2 个答案:

答案 0 :(得分:1)

键应该是唯一的。您可以set使用自己的密钥而不是push

admin.database().ref('/messages/'+ yourUniqueId).set({original: original}).then(function (snapshot) {
 res.redirect(303, snapshot.ref);}); 

yourUniqueId可以是auth uidemail用户,也可以是唯一的。

答案 1 :(得分:1)

如果您想循环浏览所有消息:

var ref = firebase.database().ref("messages");
ref.once("value", function(snapshot) {
  snapshot.forEach(function(message) {
    console.log(message.key+": "+message.val().original);
  });
});

如果要查找特定消息,请使用查询:

var ref = firebase.database().ref("messages");
var query = ref.orderByChild("original").equalTo("aaaa");
query.once("value", function(snapshot) {
  snapshot.forEach(function(message) {
    console.log(message.key+": "+message.val().original);
  });
});

有关详情,请阅读reading lists of datasorting and filtering data上的Firebase文档,然后选择Firebase codelab