В Firebase при использовании push() Как получить уникальный идентификатор и сохранить в моей базе данных

Я отправляю данные в FireBase, но я также хочу сохранить уникальный идентификатор в моей базе данных. Может кто-нибудь сказать мне, как подтолкнуть данные с уникальным идентификатором.

я пытаюсь вот так

  writeUserData() {
    var key= ref.push().key();
    var newData={
        id: key,
        websiteName: this.webname.value,
        username: this.username.value,
        password : this.password.value,
        websiteLink : this.weblink.value
    }
    firebase.database().ref().push(newData);
  }

ошибка "ReferenceError: ссылка не определена"

Ответы

Ответ 1

Вы можете получить ключ, используя функцию key() любого объекта ref

Есть два способа вызвать push в SDK Firebase JavaScript.

  • с помощью push(newObject). Это приведет к созданию нового идентификатора push и записи данных в местоположении с этим идентификатором.

  • используя push(). Это создаст новый идентификатор push и вернет ссылку на местоположение с этим идентификатором. Это чистая клиентская сторона операции.

Зная № 2, вы можете легко получить новую клиентскую идентификацию push id с:

var newKey = ref.push().key();

Затем вы можете использовать этот ключ в своем многоуровневом обновлении.

fooobar.com/questions/358891/...

Если вы вызываете метод Firebase push() без аргументов, это чистая клиентская операция.

var newRef = ref.push(); // this does *not* call the server

Затем вы можете добавить key() нового ref к вашему элементу:

var newItem = {
    name: 'anauleau'
    id: newRef.key()
};

И напишите элемент в новом месте:

newRef.set(newItem);

fooobar.com/questions/358892/...

в вашем случае:

writeUserData() {
  var myRef = firebase.database().ref().push();
  var key = myRef.key();

  var newData={
      id: key,
      Website_Name: this.web_name.value,
      Username: this.username.value,
      Password : this.password.value,
      website_link : this.web_link.value
   }

   myRef.push(newData);

}

Ответ 2

Firebase v3 Сохранение данных

function writeNewPost(uid, username, picture, title, body) {
  // A post entry.
  var postData = {
    author: username,
    uid: uid,
    body: body,
    title: title,
    starCount: 0,
    authorPic: picture
  };

  // Get a key for a new Post.
  var newPostKey = firebase.database().ref().child('posts').push().key;

  // Write the new post data simultaneously in the posts list and the user post list.
  var updates = {};
  updates['/posts/' + newPostKey] = postData;
  updates['/user-posts/' + uid + '/' + newPostKey] = postData;

  return firebase.database().ref().update(updates);
}

Ответ 3

Вы можете получить последний вставленный идентификатор элемента, используя Promise, как это

let postRef = firebase.database().ref('/post');
postRef.push({ 'name': 'Test Value' })
    .then(res => {
        console.log(res.getKey()) // this will return you ID
    })
    .catch(error => console.log(error));

Ответ 4

Похоже, теперь .push() всегда возвращает Observable. При применении решений выше я имел следующую ошибку: "Тип" String "не имеет совместимых сигнатур вызовов".

Сказав это, я ссылаюсь на то, что работало в моем случае для этой новой версии:

Тип 'String' не имеет совместимых сигнатур вызовов