web-dev-qa-db-ja.com

Firebase:キーの一意の数値IDを生成する方法?

人間が読みやすいように数値IDが必要です。 Firebaseで取得するにはどうすればよいですか?

キーの数値IDが必要です。 「000000001」、「000000002」、「00000003」、「00000004」。

必要な理由は、これらのIDがオンラインとオフラインの両方で永続的なオブジェクトIDになるためです。ユーザーがURL「/ objects/00000001」を入力するだけで、苦労せずにそのオブジェクトページを閲覧できるようにします。

.priority、サブプロパティなどを使用せずにこれを行うことができるかどうかを知りたいので、ここで尋ねています。setメソッドが何らかの形でそれを行うことができると思います。それが不可能な場合は、ノーと言ってください、私はその答えを受け入れることができます。

51
Ivan Wang

Firebaseのドキュメントを読むことをお勧めします。具体的には、Firebase JavaScript Webガイドの Saving Data の部分をご覧ください。

ガイドから:

Push()によって生成された一意のIDを取得する

Push()を呼び出すと、新しいデータパスへの参照が返されます。これを使用して、IDの値を取得したり、データにデータを設定したりできます。次のコードは上記の例と同じデータになりますが、生成された一意のプッシュIDにアクセスできるようになります

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

  • Pushは、keyとしてサーバーのタイムスタンプを使用して、新しいデータパスを生成します。これらのキーは-JiGh_31GA20JabpZBfaのように見えるため、数値ではありません。
  • 数値のみのIDを作成する場合は、生成されたキーの上書きを避けるために、オブジェクトのパラメーターにします。
    • キー(新しいデータのパス)は一意であることが保証されているため、数字キーで上書きしても意味がありません。
    • 代わりに、オブジェクトの子として数値IDを設定できます。
    • その後、 Firebase Queries を使用して、そのIDの子によってオブジェクトをクエリできます。

ガイドから:

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

68
Sinan Bolel

上記で説明したように、FirebaseのデフォルトのプッシュIDを使用できます。

数値が必要な場合は、衝突を避けるためにタイムスタンプに基づいて何かを行うことができます

f.e.日付、時間、秒、ミリ秒、および最後のランダムな整数に基づいたもの

01612061353136799031

次のように変換されます:

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

それはすべて、必要な精度に依存します(社会保障番号は、日付の終わりにランダムな文字を使用しても同じです)。 1日、1時間、または1秒の間に予想されるトランザクション数など。入力しやすくするために、精度を下げることができます。

番号IDをインクリメントするトランザクションを実行することもできます。成功すると、そのユーザーに一意の連続した番号が割り当てられます。これらは、クライアント側またはサーバー側で実行できます。

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

5
htafoya

ドキュメント のように、これはsetの代わりにPushを使用するだけで実現できます。

ドキュメントが言うように、それは推奨されません(「同じ」時間に他のユーザーによって上書きされる可能性があるため)。

ただし、場合によっては、キーを含むフィードのコンテンツを制御すると便利です。

Jsでのwebappの例として、193は他の場所で生成されたidであり、単純に:

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

これにより、193というラベルの付いた領域が上書きされるか、まだ存在しない場合は作成されます。

0
Fanky