0
votes

Problème d'obtenir de la documentation lorsque vous essayez de suivre les géolocations des différents utilisateurs avec des nuages ​​angulaires Fireestore

Je suis nouveau pour Firebase Cloud Fireestore. Ce que j'essaie de faire est de suivre les géolocations des utilisateurs connectés à l'aide de l'API Google-Maps. Il y a beaucoup de questions, mais le plus déroutant est de savoir comment obtenir un identifiant DuCument généré automatiquement et comment définir automatiquement l'identifiant de document? Voici la partie du code:

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


1 commentaires

Si cette partie du code n'est pas suffisante, laissez-moi savoir pls et je posterai plus pour que vous puissiez mieux comprendre ma question!


3 Réponses :


1
votes

the La documentation est assez claire: < / p>

Lorsque vous utilisez ensemble () pour créer un document, vous devez spécifier un identifiant pour le document pour créer

Mais parfois il n'y a pas d'identifiant significatif pour le document, et c'est Plus pratique de laisser Cloud Fireestore Auto-générer un identifiant pour vous. Vous pouvez le faire en appelant ajouter ()

et ensuite concernant update :

mettre à jour certains champs d'un document sans écraser l'ensemble de l'ensemble Document, utilisez la méthode Update ()

(Calling Update sur un document non existant échouera)


4 commentaires

Merci pour la réponse rapide! Donc, je change le "Doc (). Ensemble ()" sur "Ajouter ()" et il générera un nouveau document avec ID sans signification. Mais comme ceci est une fonction de géolocalisation de suivi (je l'ai mise dans Geolocation.WatchPosition ()) Je dois mettre à jour le contenu du document tout le temps, alors comment puis-je obtenir ce nouveau document généré avec son identifiant sans signification et la mise à jour? Merci encore!


Utilisez un identifiant avec une signification alors! Comme vous ID utilisateur


TKS! J'ai pensé à cette idée comme "this.f.fs.collection (" UserLocations "). Doc (user.uid) .set" mais cet "utilisateur" est un tableau o une donnée observable o autre chose parce qu'il y a plus d'un utilisateur? Comment Coud je génère cet "utilisateur"? Désolé pour cette question peut-être stupide, je suis assez confus comme un plus récent dans le feuestore


Ce dernier bit n'a rien à voir avec le feuestore. Vous stockez l'emplacement d'une entité, que ce soit un utilisateur, un groupe ou tout autre - vous devez pouvoir lui donner un identifiant si vous souhaitez le récupérer plus tard ...



0
votes

On dirait que vous essayez de suivre un emplacement unique pour chaque utilisateur et que votre utilisateur est identifié par le uuid code>. Dans ce cas, il est très logique d'utiliser la valeur code> uuid code> comme ID de ces documents, au lieu de laisser Fireestore générer un identifiant automatique pour celui-ci.

Quelque chose comme: P>

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


3 commentaires

TKS! Oui, j'ai déjà essayé cette méthode et cela m'a fait du sens. Mais puisque je fais une application Web, lorsque j'exécute l'application dans le navigateur, le périphérique UUID est naturellement "NULL", et avec le "NULL" dans DOC (NULL), j'ai eu une erreur comme "ce doit être un non String -empter, mais a obtenu null ». Je le teste donc dans un mobile Android mais ne montre rien sur la carte. Je wandar si le problème vient de localStorage? Fonctionne iGnual dans la page Web et dans les périphériques? Dites-moi comment pensez-vous de croire pls


Chaque document a besoin d'un moyen de l'identifier, sinon vous ne pouvez jamais le trouver. Alors, comment pourriez-vous pouvoir trouver le document pour ce navigateur / session s'il n'a pas d'UUID? Et si vous ne pouvez pas le trouver de quelque manière que ce soit, si vous stockez vraiment l'emplacement quand il n'y a pas encore d'UUID? Ce ne sont que des questions simplement pour vous diriger vers la structure de données appropriée BTW, car je ne sais pas assez de votre cas d'utilisation pour y répondre.


importer {appareil} de '@ ionic-natif / périphérique / ngx'; watch.subscribe ((données) => {this.updatedegocation (this.device .uuid, data.coords.la tititude, data.coords.l onction);}) essentiellement, j'utilise le périphérique Paquet d'ionic et de passage de chaque appareil UUID à la fonction ci-dessus. Et dans Firestore, j'ai une collection utilisateur avec (UID, UUID, e-mail, displayName, etc.) et une collection UserLocations avec (UUID, LAT, GNL). Pourriez-vous si gentiment me dire que je le fais de la bonne façon?



0
votes

Pour plus de détails sur l'obtention de données avec Cloud Firestore, vous pouvez consulter Obtenez des données avec Cloud Fireestore la page de documentation.


1 commentaires

Tks pour info! Je suppose qu'est-ce qui me rend confus est la géolocalisation.watchPosition.subscribe. Il met à jour les informations de localisation comme une boucle afin que je doive obtenir l'identifiant de document créé précédemment dans Fireestore. Avec un ensemble unique / Ajouter / Mettre à jour je l'ai eu mais avec tout mélange, je ne peux pas firmer la logique ...