2014-09-18 2 views
0

Je souhaite définir des données avec une priorité d'horodatage dans le passé ou le futur, mais pas à la date actuelle. Et puis être en mesure d'effectuer des requêtes avec endAt et StartAt pour des dates spécifiques (365 jours)Méthode push pour les événements passés futurs

La méthode push est idéale pour définir des ID uniques pour les données et gérer la commande. Existe-t-il une méthode pour générer une méthode "pushId unique" comme push() pour l'horodatage passé ou futur?

+0

Avez-vous regardé la documentation pour les [données ordonnées] (https://www.firebase.com/docs/web/guide/retrieving-data.html#section-ordered- données) et les priorités? Qu'avez-vous essayé? Qu'est-ce qui n'a pas fonctionné? – Kato

+0

Je sais que je peux définir des horodatages personnalisés (passés/futurs) pour chaque donnée, puis définir des priorités avec chaque horodatage ([like this] (https://examples-sql-queries.firebaseio.com/messages)). Mais je me demandais si je pouvais mettre des clés pour commander les données et aussi faire un identifiant unique comme la méthode push(). Si la bonne façon est seulement de définir des horodatages personnalisés, est-il possible d'obtenir un horodatage à partir de l'ID unique défini par la méthode push()? Désolé, j'exagère peut-être pour réutiliser les données stockées ou éviter d'écrire des données répétitives. Mais je n'ai pas encore d'expérience en matière de dénormalisation des données. – Miguel

Répondre

1

Vous pouvez essayer de créer des identifiants uniques similaires à ce que la fonction push fait, mais cela semble être beaucoup de travail pour un faible gain quand il y a des outils intégrés dans Firebase pour commander des données. La réponse la plus simple consiste à définir une priorité sur chaque enregistrement à l'aide de l'horodatage du serveur.

ref.push({ ...data..., ".priority": Firebase.ServerValue.TIMESTAMP }); 

Pour en définir un dans le futur ou le passé, spécifiez l'horodatage manuellement.

ref.push({ ...data..., ".priority": timeInTheFuture }); 

.info/serverTimeOffset peut également être utile ici pour la latence de manipulation.

Pour créer ids push, vous feriez quelque chose de semblable à ce qui suit:

  1. Obtenez l'horodatage actuel et pad à une longueur fixe (soit 16 caractères)
  2. Append une série aléatoire de chiffres, comme un nombre aléatoire ou hachage, rembourré également à une longueur fixe
  3. Votre entrée va maintenant quelque chose comme ceci: 000128198239:KHFDBWYBEFIWFE
  4. Vous avez maintenant un identifiant lexicographique triables basé sur un horodatage qui est unique

est ici un utile discussion on sorting numbers lexicographically

Questions connexes