Подтвердить что ты не робот

Firebase: как сгенерировать уникальный цифровой идентификатор для ключа?

Мне нужны числовые идентификаторы для удобства чтения. Как я могу получить его в Firebase?

Я хочу иметь числовой идентификатор для ключей, например. "000000001", "000000002", "00000003", "00000004".

Причина, в которой я нуждаюсь, заключается в том, что эти идентификаторы станут постоянным идентификатором объекта как онлайн, так и офлайн. Я хочу, чтобы пользователи могли просматривать эту страницу объекта, просто введя URL "/objects/00000001" без усилий.

Я спрашиваю здесь, потому что я хочу знать, можно ли это сделать без использования .priority, под-свойств и т.д. Я думаю, что метод set может сделать это как-то. Если это невозможно, просто скажите мне нет, я могу принять этот ответ.

4b9b3361

Ответ 1

Я предлагаю прочитать документацию Firebase. В частности, см. Раздел Сохранение данных в веб-интерфейсе JavaScript Firebase.

Из руководства:

Получение уникального идентификатора Создано нажатием()

Вызов push() возвращает ссылку на новый путь данных, который вы можете использовать для получения значения его идентификатора или установки данных. Следующий код приведет к тем же данным, что и в приведенном выше примере, но теперь у нас будет доступ к уникальному идентификатору push, который был сгенерирован

// 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;

Источник: https://www.firebase.com/docs/web/guide/saving-data.html

  • Нажатие генерирует новый путь передачи данных с отметкой времени сервера как key. Эти клавиши выглядят как -JiGh_31GA20JabpZBfa, поэтому не числовые.
  • Если вы хотите сделать числовой идентификатор, вы должны сделать это параметром объекта, чтобы избежать перезаписи сгенерированного ключа.
    • Ключи (пути к новым данным) гарантированно уникальны, поэтому нет необходимости переписывать их с помощью числового ключа.
    • Вместо этого вы можете установить числовой идентификатор в качестве дочернего объекта.
    • Затем вы можете запросить объекты с помощью этого дочернего элемента ID с помощью Firebase Queries.

Из руководства:

В JavaScript шаблон вызова push(), а затем сразу вызывающий set() настолько распространен, что мы позволяем вам объединять их, просто передавая данные, которые должны быть установлены непосредственно для push() следующим образом. Обе следующие операции записи приведут к тому, что одни и те же данные будут сохранены в 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"
});

Источник: https://www.firebase.com/docs/web/guide/saving-data.html

Ответ 2

Как объяснялось выше, вы можете использовать push-идентификатор Firebase по умолчанию.

Если вы хотите что-то числовое, вы можете сделать что-то на основе отметки времени, чтобы избежать столкновений

что-то, основанное на дате, часе, секунде, мс и некотором случайном int в конце

01612061353136799031

Что переводится как:

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

Все зависит от необходимой точности (номера социального страхования делают то же самое с некоторыми случайными символами в конце даты). Например, сколько транзакций ожидается в течение дня, часа или секунды. Вы можете снизить точность, чтобы облегчить ввод текста.

Вы также можете сделать транзакцию, которая увеличивает номер ID, и в случае успеха у вас будет уникальный последовательный номер для этого пользователя. Это можно сделать на стороне клиента или сервера.

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

Ответ 3

Как сказано в документации, этого можно достичь, просто используя set вместо push.

Как говорится в документации, это не рекомендуется (из-за возможной перезаписи другим пользователем в одно и то же время).

Но в некоторых случаях полезно иметь контроль над содержимым канала, включая ключи.

В качестве примера webapp в js, 193 является вашим идентификатором, сгенерированным в другом месте, просто:

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

Это перезапишет любую область с меткой 193 или создаст ее, если она еще не существует.