web-dev-qa-db-fra.com

Firebase: comment générer un identifiant numérique unique pour la clé?

J'ai besoin d'identifiants numériques pour la lisibilité humaine. Comment l'obtenir dans Firebase?

Je veux un identifiant numérique pour les clés, par exemple "000000001", "000000002", "00000003", "00000004".

J'en ai besoin parce que ces identifiants deviendront l'identifiant d'objet permanent à la fois en ligne et hors ligne. Je souhaite que les utilisateurs puissent parcourir cette page d'objet en saisissant simplement l'URL "/ objets/00000001" sans effort.

Je demande ici, parce que je veux savoir si cela peut être fait sans utiliser .priority, sous-propriétés, etc. J'imagine que la méthode set peut le faire en quelque sorte. Si ce n'est pas possible, dites-moi simplement que non, je peux accepter cette réponse.

51
Ivan Wang

Je suggère de lire la documentation Firebase. Plus précisément, voir la partie Saving Data du Guide Web JavaScript de Firebase.

Extrait du guide:

Obtenir l'ID unique généré par Push ()

L'appel de Push () renvoie une référence au nouveau chemin de données, que vous pouvez utiliser pour obtenir la valeur de son ID ou lui affecter des données. Le code suivant générera les mêmes données que l'exemple ci-dessus, mais nous aurons maintenant accès à l'ID unique de Push généré

// Generate a reference to a new location and add some data using Push()
var newPostRef = postsRef.Push({
  author: "gracehop",
  title: "Announcing COBOL, a New Programming Language"
});
// Get the unique ID generated by Push() by accessing its key
var postID = newPostRef.key;

Source: https://www.firebase.com/docs/web/guide/saving-data.html

  • Un push génère un nouveau chemin de données, avec un horodatage de serveur comme key. Ces touches ressemblent à -JiGh_31GA20JabpZBfa, donc pas numérique.
  • Si vous voulez créer un identifiant numérique uniquement, vous devez en faire un paramètre de l'objet pour éviter d'écraser la clé générée.
    • Les clés (les chemins des nouvelles données) sont garanties d'être uniques, il est donc inutile de les écraser avec une clé numérique.
    • Vous pouvez plutôt définir l'ID numérique en tant qu'enfant de l'objet.
    • Vous pouvez ensuite interroger des objets avec cet ID enfant à l'aide de requêtes Firebase .

Extrait du guide:

En JavaScript, le modèle d’appel de Push () puis immédiatement d’appel de set () est si courant que nous vous permettons de les combiner en transmettant simplement les données à définir directement à Push () comme suit. Les deux opérations d'écriture suivantes entraîneront l'enregistrement des mêmes données sur Firebase:

// These two methods are equivalent
postsRef.Push().set({
  author: "gracehop",
  title: "Announcing COBOL, a New Programming Language"
});
postsRef.Push({
  author: "gracehop",
  title: "Announcing COBOL, a New Programming Language"
});

Source: https://www.firebase.com/docs/web/guide/saving-data.html

68
Sinan Bolel

Comme expliqué ci-dessus, vous pouvez utiliser l'identifiant Push par défaut de Firebase.

Si vous voulez quelque chose de numérique, vous pouvez faire quelque chose en fonction de l'horodatage pour éviter les collisions

f.e. quelque chose basé sur la date, heure, seconde, ms, et certains int aléatoires à la fin

01612061353136799031

Ce qui se traduit par:

016-12-06 13:53:13:679 9031

Tout dépend de la précision dont vous avez besoin (les numéros de sécurité sociale font de même avec des caractères aléatoires à la fin de la date). Comme combien de transactions seront attendues au cours de la journée, heure ou seconde. Vous voudrez peut-être diminuer la précision pour faciliter la frappe.

Vous pouvez également effectuer une transaction qui incrémente l'identifiant du numéro. En cas de succès, vous obtiendrez un numéro consécutif unique pour cet utilisateur. Celles-ci peuvent être effectuées côté client ou côté serveur.

( https://firebase.google.com/docs/database/Android/read-and-write )

5
htafoya

Comme la documentation dit, ceci peut être réalisé simplement en utilisant set à la place si Push.

Comme le dit la documentation, cela n’est pas recommandé (en raison du possible écrasement par d’autres utilisateurs au même moment).

Mais dans certains cas, il est utile de contrôler le contenu du flux, y compris les clés.

Comme exemple d’application Web dans js, 193 étant votre identifiant généré ailleurs, simplement:

 firebase.initializeApp(firebaseConfig);
  var data={
      "name":"Prague"
  };
  firebase.database().ref().child('areas').child("193").set(data);

Cela écrasera toute zone étiquetée 193 ou en créera une si elle n’existe pas encore.

0
Fanky