Firebase功能 - 在不知道密钥的情况下删除数据

时间:2017-12-30 13:10:03

标签: firebase firebase-realtime-database google-cloud-functions

Data Structure 我将Firebase实时数据库中的数据插入到具有上述结构的表中。数据的密钥是基于push自动生成的。在创建了几个这样的条目之后,由于某些条件,我可能需要删除其中一个条目。在删除条目时,我可能知道要删除的节点的某些值,如createdAtcreatedForPostID。但我不知道密钥,因为它是使用firebase数据库的push功能自动生成的。 createdAtcreatedForPostID的组合构成了一个唯一的组合,数据库中只应存在一个此类条目。

OUTBOUND无需检索整个节点的情况下,识别条目的最有效方法是什么?

我使用push的原因是因为Firebase声称它有效并且不会受到写入冲突的影响。我还依赖push提供的日期/时间自动排序。

如果找不到有效的方法,那么我将使用日期/时间戳生成我自己的密钥。但是我希望这是一个有人之前已经解决的问题,因此可以指导我。

欢迎任何建议。

2 个答案:

答案 0 :(得分:1)

您需要运行查询才能找到符合条件的项目。

由于您的条件似乎有多个属性,而Firebase数据库只能查询单个属性,因此您需要将这些值合并到一个属性中,如here所示。

然后,您可以对该组合属性运行查询并删除它返回的项目:

var query = ref.orderByChild("createForPostID-createdAt").equalTo("20171229_124904-20171230_200343");
query.once("value", function(snapshot) {
  snapshot.forEach(function(child) {
    child.ref.remove();
})

答案 1 :(得分:0)

鉴于Frank的回答我意识到,我需要根据他的建议创建一个独特的属性,因为我将需要它来进行未来的查询。但是,似乎我可能会更好地使用该唯一属性作为关键而不是使用push

从整体来看,如果应用需要keypush功能,那么创建自己的create代替delete可能更有效率。只有在创建数据并且删除不是您应用的重要功能时,依赖push才有意义。

因此,总而言之,对于Firebase数据,同时执行数据createdelete的最有效方法需要自己创建唯一键。