推送到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 uid
或email
,就像一些独特的东西。
【讨论】:
以上是关于推送到firebase数据库时如何设置推送键?的主要内容,如果未能解决你的问题,请参考以下文章
使用javascript将数据推送到firebase数据库列表中时如何保存对象uid