Alex
Alex

Reputation: 63

How to set push key when pushing to firebase database?

When I write data to firebase database from both frontend(Angular 4) and backend(firebase functions), there is a push key generated by firebase. With this key, I cannot access data in the future because the key is unique. I am wondering is any way I can set the key myself or I can access the data without knowing the key?

Here is my code from frontend:

this.db.list(`${this.basePath}/`).push(upload);


Here is my code from backend:

admin.database().ref('/messages').push({original: original}).then(function (snapshot) {
res.redirect(303, snapshot.ref);}); 

All data I pushed will be under path/pushID/data

simple image

I cannot access data without knowing the pushID.
The best case I want is path/my own pushID/data

Thanks so much for help!!

Upvotes: 4

Views: 3937

Answers (2)

Frank van Puffelen
Frank van Puffelen

Reputation: 598718

If you want to loop through all messages:

var ref = firebase.database().ref("messages");
ref.once("value", function(snapshot) {
  snapshot.forEach(function(message) {
    console.log(message.key+": "+message.val().original);
  });
});

If you want to find specific messages, use a query:

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);
  });
});

For much more on this, read the Firebase documentation on reading lists of data, sorting and filtering data, and take the Firebase codelab.

Upvotes: 1

Hareesh
Hareesh

Reputation: 6900

The keys should be unique in any way. You can set your own key like this instead of push

admin.database().ref('/messages/'+ yourUniqueId).set({original: original}).then(function (snapshot) {
 res.redirect(303, snapshot.ref);}); 

yourUniqueId can be auth uid or email of user, like something unique.

Upvotes: 1

Related Questions