我将Firebase实时数据库中的数据插入到具有上述结构的表中。数据的密钥是基于push
自动生成的。在创建了几个这样的条目之后,由于某些条件,我可能需要删除其中一个条目。在删除条目时,我可能知道要删除的节点的某些值,如createdAt
和createdForPostID
。但我不知道密钥,因为它是使用firebase数据库的push
功能自动生成的。 createdAt
和createdForPostID
的组合构成了一个唯一的组合,数据库中只应存在一个此类条目。
在OUTBOUND
无需检索整个节点的情况下,识别条目的最有效方法是什么?
我使用push
的原因是因为Firebase声称它有效并且不会受到写入冲突的影响。我还依赖push
提供的日期/时间自动排序。
如果找不到有效的方法,那么我将使用日期/时间戳生成我自己的密钥。但是我希望这是一个有人之前已经解决的问题,因此可以指导我。
欢迎任何建议。
答案 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
从整体来看,如果应用需要key
和push
功能,那么创建自己的create
代替delete
可能更有效率。只有在创建数据并且删除不是您应用的重要功能时,依赖push
才有意义。
因此,总而言之,对于Firebase数据,同时执行数据create
和delete
的最有效方法需要自己创建唯一键。