Firebase insert with generated key

时间:2017-07-12 08:03:32

标签: firebase firebase-realtime-database

I have a root in firebase like in the I am trying to enable user to delete an item on list. But user can give up his decision. When user give up this decision, I want to insert the deleted item again in the database. But, I want to insert with old firebase generated key, because I am using firebase push keys. Is that a bad practice. How firebase generate these keys? Does it checks every key on db and generate a new one? Is that any possibility, that key marked as removed and generated later for another item? Sorry for the language. It has been hard to express.

EDITED: I want to use the old key because, I am getting the data with orderByKey. I dont want to lose order.

enter image description here

2 个答案:

答案 0 :(得分:2)

Calling push() will generate a key for you.

If instead you use child(), you can determine they key/path yourself.

ref.child("yourvalue").setValue("setting custom key when pushing new data to firebase database");

https://firebase.googleblog.com/2015/02/the-2120-ways-to-ensure-unique_68.html

答案 1 :(得分:2)

  

firebase如何生成这些密钥?它是否检查db上的每个键并生成一个新键?

每当在数据库引用上使用push时,都会生成一个新数据节点,其中包含一个包含服务器时间戳的唯一键。这些键看起来像 - KiGh_31GA20KabpZBfa

由于时间戳,您可以确定给定的密钥是唯一的,而无需检查数据库中的其他密钥。

  

是否有可能,该键被标记为已移除并稍后为另一个项生成?

不,两个键都不会碰撞,无论是否有一个被移除。

  

但是,我想插入旧的firebase生成的密钥,因为我使用的是firebase推送密钥。这是一种不好的做法

很遗憾,您只需使用push即可生成两次相同的密钥。因此,无法删除具有给定密钥的节点,然后使用push在具有相同密钥的同一路径中再次插入该节点,因为push将生成不同且唯一的密钥。 / p>

而不是这样,如果通过密钥排序对您来说很重要,并且可能会重新插入已删除的节点,那么我建议您执行以下操作之一: -

  1. 将密钥从数据库中删除后,将密钥保存在客户端,并在需要重新插入时使用。

  2. 或者,也许,有一个"删除键"数据库中的路径并将删除的密钥保存在那里。当然,使用这种方法,您需要存储其他信息以识别密钥对应的数据。

  3. 这一切都取决于你的用例。