starrystar
starrystar

Reputation: 678

Firebase insert with generated key

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

Upvotes: 0

Views: 2682

Answers (2)

Rohan Stark
Rohan Stark

Reputation: 2396

How firebase generate these keys? Does it checks every key on db and generate a new one?

Whenever you use push on a Database Reference, a new data node is generated with a unique key that includes the server timestamp. These keys look like -KiGh_31GA20KabpZBfa.

Because of the timestamp, you can be sure that the given key will be unique, without having to check the other keys inside your database.

Is that any possibility, that key marked as removed and generated later for another item?

No, it is not possible that two keys will collide, regardless of wether one has been removed or not.

But, I want to insert with old firebase generated key, because I am using firebase push keys. Is that a bad practice

Unfortunately, you can't generate the same key twice by just using push. So, it is not possible to delete a node with a given key and then use push to insert it again at the same path with the same key, because push would generate a different and unique key.

Instead of this, if ordering by key is that important to you, and there's a possibility that a deleted node can be reinserted then I would recommend you to do one of the following :-

  1. Either save the key on the client side when it's deleted from the database, and use it when you need to reinsert.

  2. Or , maybe, have a "deleted-keys" path in your database and save the deleted keys there. Of course, with this approach, you'd need to store additional information to identify the data that the key corresponds to.

It all really depends on your use case.

Upvotes: 3

Rahul Singh
Rahul Singh

Reputation: 19632

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

Upvotes: 2

Related Questions