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

Posted

技术标签:

【中文标题】推送到firebase数据库时如何设置推送键?【英文标题】:How to set push key when pushing to firebase database? 【发布时间】:2018-04-08 02:27:31 【问题描述】:

当我从前端(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下

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

非常感谢您的帮助!

【问题讨论】:

【参考方案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 data、sorting and filtering data 上的 Firebase 文档,并使用 Firebase codelab。

【讨论】:

如果您使用查询,您还需要在数据库中添加".indexOn" 规则,以帮助数据库有效地获取您需要的数据。更多关于规则和索引的信息在这里firebase.google.com/docs/database/security/indexing-data【参考方案2】:

键在任何情况下都应该是唯一的。你可以像这样set你自己的密钥而不是push

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

yourUniqueId 可以是用户的auth uidemail,就像一些独特的东西。

【讨论】:

以上是关于推送到firebase数据库时如何设置推送键?的主要内容,如果未能解决你的问题,请参考以下文章

将新数据推送到firebase数据库时设置自定义数字键

使用javascript将数据推送到firebase数据库列表中时如何保存对象uid

使用 AFNetworking 将 Firebase 通知从 ios 设备推送到花药

使用子参考值将数据推送到 Firebase

JavaScript:推送嵌套对象键值对

如何遍历从 snapshot.val() 收到的数据并根据键将其推送到数组