firestoreでユニークな連番を作る


諸事情でfirestoreのドキュメントのUID文字列ではなく、
ユニークな数字が必要になったので、がんばる。
RDBのインクリメントID的な存在の何かをfirestoreで。

firebase functions上で作ってるので、クライアントでどうやるかはわかってないです。

async () => {
  const doc = fireStore
    .collection('something_counters')
    .doc('something-groups')
  const uniqueNumber = await fireStore.runTransaction(async (t) => {
    const tDoc = await t.get(doc)
    const newNumber = ((tDoc.data() && tDoc.data().number) || 0) + 1
    await t.set(doc, { number: newNumber }, { merge: true })
    return newNumber
  })
}
  • 適当なcollection ( something_counters ) を用意する
  • documentのIDを適当に指定することで、その単位でユニークな数字を生成できる
  • トランザクションかけながらインクリメントして数字を返す

雑に確認した感じ大丈夫そうだけど、そこまで強い確信もててるわけじゃないので、実は重複しちゃったらごめんさい。