Проблема получения documentId при попытке отследить геолокации разных пользователей с облачным хранилищем angular - PullRequest
0 голосов
/ 19 июня 2020

Я новичок в облачном хранилище firebase. Я пытаюсь отслеживать геолокации пользователей, вошедших в систему, используя google-maps API. Есть много вопросов, но самый запутанный - как получить автоматически сгенерированный идентификатор документа и как автоматически установить идентификатор документа? Вот часть кода:

updateGeolocation(uuid,lat,lng){
    if(localStorage.getItem('userLocations')){
      this.locRef.doc().update({
        deviceID: uuid,
        lat: lat,
        lng: lng
      })
      JSON.parse(localStorage.getItem('userLocations'))
      .then(function() {
        console.log("Document successfully updated.");
      })
      .catch(function(error) {
        console.error("Error updating document: ", error);
      });
    }else{
      let newData = this.locRef.doc().set({
        deviceID: uuid,
        lat: lat,
        lng: lng
      },{merge: true});
      localStorage.setItem('userLocations', JSON.stringify(newData));
      JSON.parse(localStorage.getItem('userLocations'));
    }
 }

Например, я понятия не имею, что мне вставить в «this.locRef.do c (???)». Возможно, я мог бы ввести в него «uuid», но когда я использую навигатор, он был «нулевым» и не работал. Я просмотрел официальный документ и, похоже, мы можем оставить его пустым (do c ()), и он автоматически сгенерирует c id, но таким образом у меня есть ошибки. Кто-нибудь может мне помочь?

Ответы [ 3 ]

1 голос
/ 19 июня 2020

Документация довольно ясна:

Когда вы используете set () для создания документа, вы должны указать идентификатор для создаваемого документа

Но иногда для документа нет значимого идентификатора, и удобнее позволить Cloud Firestore автоматически генерировать идентификатор для вас. Вы можете сделать это, вызвав add ()

А затем применив update:

Чтобы обновить некоторые поля документа без перезаписи всего документа, используйте обновление () метод

(Вызов обновления для несуществующего do c завершится ошибкой)

0 голосов
/ 19 июня 2020

Подробные сведения о получении данных с помощью Cloud Firestore можно найти на странице документации Получить данные с помощью Cloud Firestore .

0 голосов
/ 19 июня 2020

Похоже, вы пытаетесь отследить отдельное местоположение для каждого пользователя, и ваш пользователь идентифицирован uuid. В этом случае имеет смысл использовать значение uuid в качестве идентификатора для этих документов, вместо того, чтобы позволить Firestore генерировать для него автоматический идентификатор.

Что-то вроде:

updateGeolocation(uuid,lat,lng){
    if(localStorage.getItem('userLocations')){
      this.locRef.doc(uuid).update({
        deviceID: uuid,
        lat: lat,
        lng: lng
      })
      JSON.parse(localStorage.getItem('userLocations'))
      .then(function() {
        console.log("Document successfully updated.");
      })
      .catch(function(error) {
        console.error("Error updating document: ", error);
      });
    }else{
      let newData = this.locRef.doc(uuid).set({
        deviceID: uuid,
        lat: lat,
        lng: lng
      },{merge: true});
      localStorage.setItem('userLocations', JSON.stringify(newData));
      JSON.parse(localStorage.getItem('userLocations'));
    }
}
...